我比较新的Batch Scripts
,我想创build一个Windowsbatch file,重命名一个组中的静态数组值对另一个静态数组值 – 移动到另一个文件夹。 像这样的东西:
setlocal EnableDelayedExpansion set currentDate=%date:~-4,4%%date:~-10,2%%date:~-7,2% set fromPath=C:\ set toPath=C:\Temp\ set fileList=(temp1.txt temp2.txt temp3.txt) set toList=(name1 name2 name3)
我正在寻找这种风格的数组,因为它看起来更容易为用户添加到列表中。
单独(没有toList)fileList工作正常:
for %%i in %fileList% do ( IF EXIST %FromPath%%%i ren %FromPath%%%i %%~ni_%currentDate%%%~xi & move %FromPath%%%~ni_%currentDate%%%~xi %toPath% )
但是,显然这不会按照与toList
中的列表相同的顺序从toList
进行重命名。
我试着用一个像这样的索引的计数器的代码(尝试下面的其他变种),没有运气:
for /L %%i IN (0,1,10) DO ( IF EXIST %FromPath%%fileList[%%i]% ren %FromPath%%%i %%~ni_%currentDate%%%~xi & move %FromPath%%%~ni_%currentDate%%%~xi %toPath% )
是这样的可能吗? 如果没有,我愿意接受任何其他build议。
提前致谢!
尝试这个:
@echo off setlocal EnableDelayedExpansion set currentDate=%date:~-4,4%%date:~-10,2%%date:~-7,2% set FromPath=C:\ set toPath=C:\Temp\ set fileList=(temp1.txt temp2.txt temp3.txt) set toList=(name1 name2 name3) rem Separate toList elements into an array set i=0 for %%a in %toList% do ( set /A i+=1 set "toList[!i!]=%%a" ) set i=0 for %%f in %fileList% do ( set /A i+=1 IF EXIST %FromPath%%%f ( ren %FromPath%%%f %%~Nf_%currentDate%%%~Xf for %%i in (!i!) do move %FromPath%%%~Nf_%currentDate%%%~Xf %toPath%!toList[%%i]! ) )
有关批处理文件中数组管理的更多信息,请参阅: cmd.exe(批处理)脚本中的数组,链表和其他数据结构