批处理脚本循环遍历具有可变索引的数组
Batch Script Loop through Array with Variable Index
由于一些操作需要,我正在尝试编写一些简单的批处理脚本(硬代码可接受),如果它看到一些模式,替换文件名,替换字符串和模式是 1-1 映射。
但我卡在了最后一步:对于Ren命令,我无法使用变量计数器访问数组。如果我将 %counter% 替换为 2 或 3 之类的整数,该脚本可以运行并可以重命名该特定文件。
我是批处理脚本的新手,我可以知道如何访问具有可变索引的数组元素吗?
@ECHO OFF
Setlocal enabledelayedexpansion
Set "Pattern[0]=pat0"
Set "Pattern[1]=pat1"
...
Set "Replace[0]=rep0"
Set "Replace[1]=rep1"
...
Set /a counter = 0
For /r %%# in (*.pdf) Do (
Set "File=%%~nx#"
Ren "%%#" "!File:%Pattern[%counter%]%=%Replace[%counter%]%!"
Set /a counter += 1
)
endlocal
像这样用一个额外的 for 循环试试:
@ECHO OFF
Setlocal enabledelayedexpansion
Set "Pattern[0]=pat0"
Set "Pattern[1]=pat1"
Set "Replace[0]=rep0"
Set "Replace[1]=rep1"
Set /a counter = 0
For /r %%# in (*.pdf) Do (
Set "File=%%~nx#"
For /f "tokens=1,2 delims=;" %%A in ("!Pattern[%counter%]!;!Replace[%counter%]!") do (
echo Ren "%%#" "!File:%%A=%%B!"
)
Set /a counter += 1
)
endlocal
您也可以尝试使用其他子例程或使用 CALL(请参阅 高级用法:调用内部命令 部分和 call set
)但这应该是最佳表现方法。
根据@npocmaka 的回复,我进一步添加了一个简单的循环,最终它适用于我的情况:
For /r %%# in (*.pdf) Do (
Set "File=%%~nx#"
For /l %%c in (0,1,8) Do (
For /f "tokens=1,2 delims=;" %%A in ("!Pattern[%%c]!;!Replace[%%c]!") Do (
Ren "%%#" "!File:%%A=%%B!"
)
)
)
由于一些操作需要,我正在尝试编写一些简单的批处理脚本(硬代码可接受),如果它看到一些模式,替换文件名,替换字符串和模式是 1-1 映射。
但我卡在了最后一步:对于Ren命令,我无法使用变量计数器访问数组。如果我将 %counter% 替换为 2 或 3 之类的整数,该脚本可以运行并可以重命名该特定文件。
我是批处理脚本的新手,我可以知道如何访问具有可变索引的数组元素吗?
@ECHO OFF
Setlocal enabledelayedexpansion
Set "Pattern[0]=pat0"
Set "Pattern[1]=pat1"
...
Set "Replace[0]=rep0"
Set "Replace[1]=rep1"
...
Set /a counter = 0
For /r %%# in (*.pdf) Do (
Set "File=%%~nx#"
Ren "%%#" "!File:%Pattern[%counter%]%=%Replace[%counter%]%!"
Set /a counter += 1
)
endlocal
像这样用一个额外的 for 循环试试:
@ECHO OFF
Setlocal enabledelayedexpansion
Set "Pattern[0]=pat0"
Set "Pattern[1]=pat1"
Set "Replace[0]=rep0"
Set "Replace[1]=rep1"
Set /a counter = 0
For /r %%# in (*.pdf) Do (
Set "File=%%~nx#"
For /f "tokens=1,2 delims=;" %%A in ("!Pattern[%counter%]!;!Replace[%counter%]!") do (
echo Ren "%%#" "!File:%%A=%%B!"
)
Set /a counter += 1
)
endlocal
您也可以尝试使用其他子例程或使用 CALL(请参阅 高级用法:调用内部命令 部分和 call set
)但这应该是最佳表现方法。
根据@npocmaka 的回复,我进一步添加了一个简单的循环,最终它适用于我的情况:
For /r %%# in (*.pdf) Do (
Set "File=%%~nx#"
For /l %%c in (0,1,8) Do (
For /f "tokens=1,2 delims=;" %%A in ("!Pattern[%%c]!;!Replace[%%c]!") Do (
Ren "%%#" "!File:%%A=%%B!"
)
)
)