我目前有一个批处理文件,它可以创建文件夹,子文件夹,复制模板文件并更改这些文件的名称。
我正尝试创建另一个由原始批次调用的批次,以在不同目录中创建一个新文件夹。
我有1-66文件夹,正在尝试获取新批次以创建“ 67新项目名称”
我知道如何调用批处理,我只需要代码创建新文件夹的帮助,该文件夹在读取前一个数字后将以1个数字递增。
这是我的原始批次
@echo off
SET "pname=New Project Name"
for %%a in ("Bid Proposals" "Reports" "Drawings" "Specifications"
"Addenda") do md "%pname%\%%~a"
cd /d K:\ESTIMATING\2019 ESTIMATING\2019 BID-PROPOSALS\%pname%\Bid Proposals
copy "K:\User\Estimating Tools\Bid Proposal - Template.docx" .
rename "Bid Proposal - Template.docx" "%pname% - Bid Proposal.docx"
cd /d K:\ESTIMATING\2019 ESTIMATING\2019 BID-PROPOSALS\%pname%\Specifications
copy "K:\User\Estimating Tools\Bid Package Info Sheet fillable in progress.pdf"
rename "Bid Package Info Sheet fillable in progress.pdf" "%pname% - Bid Package Info Sheet.pdf"
我认为我必须在要创建新子文件夹的文件夹中创建一个新批处理。
然后从该批次中调用它。
新批次将在C:\ Users's Tiffs中创建“67。(或下一个数字是%pname%”)
答案 0 :(得分:0)
您可以尝试执行此操作,假设每个文件的开头都是数字,并且文件号没有按顺序创建,因为我们正在按日期时间进行排序。
@echo off
setlocal
set "destDir=K:\ESTIMATING\2019 ESTIMATING\2019 BID-PROPOSALS"
set "sourceDir=K:\User\Estimating Tools"
call :GetCounterVal
if "%ctr%"=="0" (
@echo Cannot locate a counter value
goto :eof
)
SET "pname=%ctr% New Project Name"
for %%a in ("Bid Proposals" "Reports" "Drawings" "Specifications" "Addenda") do md "%pname%\%%~a"
cd /d "%destDir%\%pname%\Bid Proposals"
copy "%sourceDir%\Bid Proposal - Template.docx" .
rename "Bid Proposal - Template.docx" "%pname% - Bid Proposal.docx"
cd /d "%destDir%\%pname%\Specifications"
copy "%sourceDir%\Bid Package Info Sheet fillable in progress.pdf"
rename "Bid Package Info Sheet fillable in progress.pdf" "%pname% - Bid Package Info Sheet.pdf"
goto :EOF
:GetCounterVal
:: iterate the files in desc order by date/time
for /f "eol=: delims=" %%F in ('dir /AD /O-D /B "%*New Project Name*"') do (
:: read first file, then exit loop
call :getFile %%F
goto :break
)
:break
if not "%ctr%"=="0" (set /A ctr=ctr+1)
@echo New value is %ctr%
goto :EOF
:getFile
:: Cheap way to automatically parse everything left of first space
:: If parameter is not a number, it will be set to zero
set /A ctr=%1
@echo Last value is %ctr%
goto :EOF