在批处理 cmd 文件中使用 set 更新变量值

Using set in a batch cmd file to update a variable value

批处理文件Test.cmd:

@set args=args1
@set value=value1

@if defined value (
  @echo args: [%args%], value: [%value%]
  @set args=%args% /value=%value%
  @echo args: [%args%]
)

@echo args: [%args%]

命令输出>.\Test.cmd

args: [args1], value: [value1]
args: [args1]
args: [args1 /value=value1]

为什么我对 @echo args: [%args%] return 的每次调用都有不同的值? (一个没有更新的 args 值,args1,一个有更新,args1 /value=value1

首先,不要在每行的开头使用 @,只需将 @echo off 放在脚本的最开头,这将执行相同的操作,但不必将 @ 放在每行。

我还建议在脚本的开头使用 setlocal,以避免在 CMD window/script 关闭后留下系统上定义的变量。它导致变量只能被该 CMD/script 实例访问。

尝试以下代码并注意 echo args: [!args!]

@echo off
Setlocal EnableDelayedExpansion

set args=args1
set value=value1

if defined value (
  echo args: [%args%], value: [%value%]
  set args=%args% /value=%value%
  echo args: [!args!]
)

echo args: [%args%]

endlocal
pause

输出:

args: [args1], value: [value1]
args: [args1 /value=value1]
args: [args1 /value=value1]

在这里阅读更多关于 EnableDelayedExpansion 的使用...https://ss64.com/nt/delayedexpansion.html