gpt4 book ai didi

arrays - Windows 批处理静态列表重命名-移动

转载 作者:可可西里 更新时间:2023-11-01 10:44:31 24 4
gpt4 key购买 nike

我对 Batch Scripts 比较陌生,我正在尝试创建一个 Windows 批处理文件,该文件将一组中的静态数组值重命名为另一组中的静态数组值 - 移动到另一个文件夹。像这样:

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%
)

这样的事情可能吗?如果没有,我愿意接受针对上述内容的任何其他建议。

提前致谢!

最佳答案

试试这个:

@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]!
)
)

有关批处理文件中数组管理的更多信息,请参阅:Arrays, linked lists and other data structures in cmd.exe (batch) script

关于arrays - Windows 批处理静态列表重命名-移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32096582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com