2014-07-14 137 views
0

我基本上是一個最近被迫進入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你好

OUTPUT:
這是testbat腳本 -------------- ---------

 Argument is hello 
     myvar is not set to hello 

第二次運行:

testbat.bat你好

OUTPUT:
這是testbat腳本 -----------------------

 Argument is hello 
     myvar is hello 

現在改變參數再見 第三輪:

testbat.bat再見

OUTPUT: 這是testbat腳本 -----------------------

 Argument is bye 
     myvar is not set to bye (In fact, it is still hello here) 

RUN第四(同輸入作爲第三):

 > testbat.bat bye 

OUTPUT: 這是testbat腳本 -----------------------

 Argument is bye 
     myvar is bye (Finally gets updated) 

////////////////////////////////////

我的問題是爲什麼腳本沒有'第一次更新環境變量?
爲什麼我需要再次運行腳本才能讓變量更改爲腳本中的新值?我使用SET命令並發現該值在環境中已更改,爲什麼腳本輸出反映舊值。當然,在腳本完成之後,環境中的值可能不會改變,不確定。

我正在運行腳本,然後使用向上箭頭來編輯命令行,如果這有什麼區別,它似乎並不是。

+0

好像它需要一定的時間有限量的設置生效。 –

+0

你在循環內運行腳本嗎? – konsolebox

+0

不,這是一個將目錄路徑作爲輸入並計算該目錄中每個文件的CRC並使用CRC信息創建(或更新)該目錄中的現有文件的單次鏡頭。 – user1725779

回答

1

您不能使用%1%作爲環境變量,因爲%1是命令行可替換參數。

set/changedisplay或括號內的變量的循環中,您需要

@echo off 
setlocal enabledelayedexpansion 

,並使用echo !myvar!

+0

如果我用%1替換%1%,我仍然有同樣的問題。 – user1725779

+0

查看我的回答的第二部分 – foxidrive

+0

我不在一個循環中,這並不能解決問題。 – user1725779