以下代码接受批处理文件的所有命令行参数。在我的情况下,我有大约30个命令行参数,它们都是1,2或3的数字。我接受它们然后想要将它们重新分配给其他字符。我想要每个var,如果它是1,则将其更改为/ *,如果它是2,则将其更改为* /,如果它是3,则将其更改为#。
第一部分效果很好,重新分配的第二部分是我无法获得语法。
SETLOCAL ENABLEDELAYEDEXPANSION
set count=1
FOR %%i IN (%*) DO (
set var!count!=%%i
set var!count!=!var!count!:1=/*! <--don't work
set var!count!=!var!count!:2=*/! <--don't work
set var!count!=!var!count!:3=#! <--don't work
set /a count=!count!+1
)
答案 0 :(得分:2)
问题是访问数组成员的方式。
在您的情况下,最好的方法似乎是使用临时变量。
SETLOCAL ENABLEDELAYEDEXPANSION
set count=1
FOR %%i IN (%*) DO (
set "temp=%%i"
set "temp=!temp:1=/*!"
set "temp=!temp:2=*/!"
set "temp=!temp:3=#!"
set "var!count!=!temp!"
set /a count+=1
)
答案 1 :(得分:2)
我认为jeb有最简单的解决方案,但还有其他选择。
1)您可以将count的当前值转换为FOR变量。这就是我倾向于这样做的方式。
SETLOCAL ENABLEDELAYEDEXPANSION
set count=1
FOR %%i IN (%*) DO (
for %%N in (!count!) do (
set "var%%N=%%i"
set "var%%N=!var%%N:1=/*!"
set "var%%N=!var%%N:2=*/!"
set "var%%N=!var%%N:3=#!"
)
set /a count+=1
)
2)您可以使用CALL来延迟外部变量的扩展,但我不喜欢这个选项,因为正常扩展不如延迟扩展那么安全。
SETLOCAL ENABLEDELAYEDEXPANSION
set count=1
FOR %%i IN (%*) DO (
set "var!count!=%%i"
call set "var!count!=%%var!count!:1=/*%%"
call set "var!count!=%%var!count!:2=*/%%"
call set "var!count!=%%var!count!:3=#%%"
set /a count+=1
)