有没有一种方法可以创建一个批处理文件,该批处理文件将按顺序创建一个文件夹?

时间:2019-09-19 17:12:07

标签: batch-file

我目前有一个批处理文件,它可以创建文件夹,子文件夹,复制模板文件并更改这些文件的名称。

我正尝试创建另一个由原始批次调用的批次,以在不同目录中创建一个新文件夹。

我有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%”)

1 个答案:

答案 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