我基本上是一个被迫进入Windows世界的Linux人,因此我需要编写一个bat脚本,但我遇到了以下问题。
这是我的.bat脚本
///////////////////////////
echo.
echo This is testbat script
echo -----------------------------------------------------------
echo.
if "%1"=="" (
echo "You did not enter an argument
) else (
set "myvar="
echo Argument is %1%
set myvar=%1%
if "%myvar%"=="%1%" (
echo myvar is %myvar%
) else (
echo myvar is not set to %1
)
)
////////////////////////////////////////////////////////
似乎我需要运行此脚本两次才能更改myvar。
例如, 第一次跑:
testbat.bat你好
输出:
这是testbat脚本
-----------------------
Argument is hello
myvar is not set to hello
SECOND RUN:
testbat.bat你好
输出:
这是testbat脚本
-----------------------
Argument is hello
myvar is hello
现在改变再见的论点 第三次运行:
testbat.bat bye
输出: 这是testbat脚本 -----------------------
Argument is bye
myvar is not set to bye (In fact, it is still hello here)
第四次运行(与THIRD相同的输入):
> testbat.bat bye
输出: 这是testbat脚本 -----------------------
Argument is bye
myvar is bye (Finally gets updated)
////////////////////////////////////
我的问题是为什么脚本第一次不更新环境变量?
为什么我需要再次运行脚本以使变量更改为脚本中的新值?我使用SET命令发现该值在环境中已更改,为什么脚本输出反映旧值。当然,在脚本完成之前,环境中的值可能不会改变,不确定。
我正在运行脚本,然后使用向上箭头编辑命令行,如果这有任何区别,但它似乎并没有。
答案 0 :(得分:1)
您不能将%1%
用作环境变量,因为%1
是命令行可替换参数。
set/change
和display
括号内的变量或您需要的循环
@echo off
setlocal enabledelayedexpansion
并使用echo !myvar!