簡體   English   中英

批量分配變量

[英]Variable assignment in batch

這個問題似乎是(非常)愚蠢的,因為我無法處理它:(

當我嘗試此批處理代碼時:

if "%1" == "-i" (
set is = %2
echo. %is%
shift
)

用2個(或更多)參數調用,則不起作用。 它實際上打印空白。 “ shift”命令也不執行。 當我觀看執行的代碼時(開始時沒有@echo關閉),我可以看到“ set”命令已完成。

它出什么問題了?

調用示例:

c:\script.bat -i test -d bla

你有兩個問題。 默認情況下,parens中的語句組將一次完成所有變量的擴展,即在set命令之前。 同樣, set的語義是錯誤的,您不需要=周圍的空格。

將此添加到文件頂部:

setlocal ENABLEDELAYEDEXPANSION

並刪除set =周圍的空格:

set is=%2

最后使用延遲擴展:

echo. !is!

可能的第三個問題是您可能需要兩個SHIFT ,一個用於-i ,一個is參數。

更新

感謝@dbenham指出這不是set的語法錯誤,這只是令人驚訝的行為,值得一點解釋。 如果執行以下命令:

set a=one
echo "%a%"

結果是:

"one"

這很有意義,但是請嘗試:

set b = two
echo "%b%"

你會得到:

"%b%"

什么? 這是未設置環境var b時的期望。 但是我們只是設置它。 還是我們:

echo "%b %"

顯示:

" two"

對於Windows set命令,與我知道的任何其他語言或環境不同,空格非常重要。 =之前的空格成為環境var名稱的一部分,之后的空格成為值的一部分。 在編寫Windows批處理程序時,這種不常見的行為是常見的錯誤來源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM