在批处理 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
批处理文件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