sat*_*kum 2 cmd batch-file set echo
批处理文件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%]
Run Code Online (Sandbox Code Playgroud)
命令输出>.\Test.cmd:
args: [args1], value: [value1]
args: [args1]
args: [args1 /value=value1]
Run Code Online (Sandbox Code Playgroud)
为什么我的每次调用都会@echo args: [%args%]返回不同的值?(一种没有更新的参数值,args1,一种具有更新,args1 /value=value1)
小智 5
首先,不要@在每行的开头使用,而是放在@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
Run Code Online (Sandbox Code Playgroud)
输出:
args: [args1], value: [value1]
args: [args1 /value=value1]
args: [args1 /value=value1]
Run Code Online (Sandbox Code Playgroud)
阅读有关EnableDelayedExpansion此处使用的更多信息... https://ss64.com/nt/delayedexpansion.html
| 归档时间: |
|
| 查看次数: |
4393 次 |
| 最近记录: |