使用批处理cmd文件中的设置来更新变量值[重复]

问题描述 投票:0回答:1

批处理文件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%]的每个调用都返回不同的值? (一个没有更新的args值args1,一个没有更新的args值args1 /value=value1

batch-file cmd set echo
1个回答
1
投票

首先,不要在每行的开头使用@,只需将@echo off放在脚本的最开始即可,这样做也一样,但是省却了在每行上都需要输入@的麻烦。

[我也建议在脚本开头使用setlocal,以避免在CMD窗口/脚本关闭后遗漏在系统上定义的变量。它使变量仅可用于该CMD /脚本实例。

尝试以下代码并注意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

© www.soinside.com 2019 - 2024. All rights reserved.