我创建了一个工作脚本,并已添加到Windows注册表中。当一个人在Windows资源管理器中右键单击时,他们可以单击"创建新作业文件夹",该文件夹将创建一个具有指定层次结构的新文件夹,但它会要求用户提供文件夹的名称。
我正在尝试弄清楚如何编辑我当前的脚本以基于某个文件夹创建层次结构。此文件夹基本上是一个模板,因此当我更新文件夹结构以更好地满足我的需求时,我使用该脚本创建的每个后续文件夹都将反映这些更改。提前感谢任何帮助!
这是我当前工作脚本中的内容:
set verbose=NO
@echo off
set mydir = %cd%
cd %mydir%
cls
call:main
goto:eof
:main
set /p job=Enter Job Name:
call:check
if %choice%==2 (echo Creating folder. Please Wait... & timeout 1 > nul &
call:createDirectory)
goto main
:check
echo[
if exist "%job%" (echo ERROR: Folder already exists. Please choose a different name.
& set choice=1) else (set choice=2)
echo[
exit /b
:createDirectory
md "%job%"
md "%job%"1.Development
md "%job%"1.Development1.Budgets
md "%job%"1.Development2.Manufacturers
md "%job%""2.Plans and Specs"
md "%job%""2.Plans and Specs"1.Plans
md "%job%""2.Plans and Specs"2.Specs
md "%job%"3.Pricing
md "%job%"3.Pricing1.Quotes
md "%job%"3.Pricing2.Worksheets
md "%job%"4.Sumbittals
md "%job%"4.Sumbittals"1.Submittal Reviews"
md "%job%"5.Orders
md "%job%"5.Orders"1.Order Summaries"
md "%job%"5.Orders"2.Confirmation Pages"
md "%job%"6.Closeout
md "%job%"6.Closeout"1.O&M Manuals"
md "%job%"6.Closeout2.Warranty
exit
FOR /D
列出当前目录的子文件夹,也可以使用FOR /D /R
(未记录的?/r 标志)递归列出当前目录中的所有子文件夹。
@echo off
setlocal
set base=c:mytemplatedir
set mydir=%cd%
goto main
:enumdir
pushd "%base%%~1%~2"
for /D %%a in (*) do (
md "%mydir%%~1%~2%%~a"
call :enumdir "%~1%~2" "%%~a"
)
popd
@goto :EOF
:main
call :enumdir . .
或者,您可以使用 FOR /R
遍历文件夹树以查找文件(*)
或文件夹(.)
。
如果您知道模板文件夹的名称中可能包含 &、! 或 %,则可能需要考虑改用 .vbs 文件,这样就不必处理特殊的批处理字符。