Batch file 复制文件夹,重命名并增加值

Batch file 复制文件夹,重命名并增加值,batch-file,auto-increment,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 her

基本上我有一个名为“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-重命名此文件夹

@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
我想让它做的是将其重命名为: 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
@echo关闭
setlocal
设置“source=u:\sourcedir\t w o”
设置“目的地=u:\destdir”
设置“项目=重命名此文件夹”
设置“年份=2019”
设置/a变量=10000
对于('dir/ad/on/b”%destination%\%year%-*“2^>nul”)中的/f“tokens=2delims=-”%%a,请设置/a Var=1%%a+1
设置“最终目的地=%destination%\%year%-%Var:~1%-%project%”
echo xcopy/s“%source%”%final\u destination%\“/O/X/E/H/K
回显icacls“%final_destination%”/grant“MACStaff:(OI)(CI)(W)”
后藤:EOF
我使用了适合我的系统的目录名

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

语法
设置“var=value”
(其中值可能为空)用于确保分配的值中不包含任何多余的尾随空格

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

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

因此-原则是使用
%year%-*
掩码,按名称顺序读取
/ad
目录名的
/b
基本模式下的目录列表,该掩码是所述年份的所有目录名

使用分隔符
-
和空格,结果将是
%%a
依次获取每个序列号(您的格式是yyyy serialSpacetext,因此第二个标记包含序列号),因此
var
与找到的最后一个值一起出现,前面加上
1

如果没有匹配的目录名,则
2^>nul
将抑制丑陋的错误消息(意味着向
nul
设备发送错误消息以处理它们,以及插入符号(
^
)告诉
cmd
重定向器是要执行的
dir
命令的一部分,而不是
var
的一部分将保持不变,因此它将保留值
10000


然后构建
final\u destination
Meccano风格,给自己冲杯咖啡。

考虑完全重新写下你的要求。这不是很清楚。我不知道从哪里开始,因为这毫无意义。