[英]Substring and command's output assignment to a variable in DOS batch programming
[英]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.