批处理文件 - 如何使用for循环对所有特定变量进行批量更改

时间:2012-10-05 04:57:07

标签: batch-file

以下代码接受批处理文件的所有命令行参数。在我的情况下,我有大约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
)

2 个答案:

答案 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
)