复制文件夹,重命名和增加值

时间:2019-06-18 15:56:05

标签: batch-file auto-increment

基本上,我有一个名为“ 9999-0004-PM Access项目创建模板V2”的文件夹 我想复制它并将其重命名为“ 2019-####-项目名称” 其中####是带前导零的数字,项目名称是用户输入名称。 我的代码可以很好地增加####的值,但是说我有:

2019-0015 - project number 1
2019-0016 - some other project
2019-0018 - a different value
2019-0019 - insert name here

当我运行批处理文件时,我最终得到:     2019-0017-重命名此文件夹

我想要将其重命名为:     2019-0020-重命名此文件夹

@echo off

setlocal enableDelayedExpansion


set source="C:\test1\9999-0004 - PM Access Project Creation Template V2"
set destination=C:\test2\

set /P project=please enter name of project:
set "n=0"

set "name=%project%"
set "year=2019"



pushd %destination%



:loop

set Var=0000%n%
set Var=%Var:~-4%

if exist %destination%\2019-%Var%* set /a n+=1 && goto :loop

set final_destination="%destination%2019-%Var% - %name%"
xcopy /s %source% %final_destination%\  /O /X /E /H /K

icacls %final_destination% /grant "MACStaff:(OI)(CI)(W)" 


popd

@echo on

1 个答案:

答案 0 :(得分:1)

@echo off

setlocal

set "source=u:\sourcedir\t w o"
set "destination=u:\destdir"

SET "project=rename this folder"

set "year=2019"

SET /a var=10000

FOR /f "tokens=2delims=- " %%a IN ('dir /ad /on /b "%destination%\%year%-*" 2^>nul') DO set /a Var=1%%a + 1
set "final_destination=%destination%\%year%-%Var:~1% - %project%"
echo xcopy /s "%source%" "%final_destination%\"  /O /X /E /H /K

ECHO icacls "%final_destination%" /grant "MACStaff:(OI)(CI)(W)" 

GOTO :EOF

我使用了适合我系统的目录名。

出于测试目的,我还强制输入了新的目录名后缀

使用语法SET "var=value"(值可以为空)来确保分配的值中不包含任何杂散的尾随空格。

将带引号的字符串分配给变量使变量难以逻辑组合。根据需要插入引号要简单得多。

请注意,此过程不需要delayedexpansion(似乎您一直没有使用)

所以-原理是使用/b的掩码按名称顺序读取/ad目录名的/on基本模式下的目录列表,按名称顺序是有关年份的所有目录名称。

使用%year%-* Space 的分隔符,结果将是-依次获取每个序列号(您的格式为yyyy - serial Space 文本,因此第二个令牌包含序列号),因此%%a会显示找到的最后一个值,并带有var并添加1。

如果没有匹配的目录名,则1禁止显示丑陋的错误消息(表示将错误消息发送到2^>nul设备以处理它们,而插入符号(nul)告诉^重定向器是要执行的cmd命令的一部分,而不是dir的一部分。for将保持不变,因此将保留值{{1 }}。

然后构造var麦加诺风格的咖啡,然后自己煮一杯咖啡。