批处理脚本循环遍历具有可变索引的数组

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!"
            
        )
    )
    
)