按命令輸出的錯誤SETX是由于錯誤地使用引號將字符串賦值給變量造成的。value
.
命令是集參數(shù)是variable=value
..對于大多數(shù)命令和應(yīng)用程序,如果包含一個或多個空格或此列表中的任何其他字符,則通常需要用雙引號環(huán)繞參數(shù):&()[]{}^=;!'+,`~
..這些字符通過在命令提示符窗口中運行,顯示在最后一個幫助頁輸出中。cmd /?
或help cmd
.
但這是錯誤的:
set value="Hello world"
在等號后面加上第一個雙引號,整個參數(shù)variable=value
號令集不在雙引號內(nèi)。
這將導(dǎo)致將雙引號解釋為字符串的一部分,以便將其賦值給帶有名稱的變量。value
..從等號到行尾的所有內(nèi)容,包括雙引號和可能存在的尾隨空格和水平制表符,都在這里分配給變量。value
而不僅僅是字符串Hello world
如預(yù)期的那樣。
關(guān)于擴線
setx -M srijani "%srijani%;%value%"
因此,結(jié)果是:
setx -M srijani "Value of variable srijani;"Hello world""
和命令SETX將錯誤引用的參數(shù)解釋為語法錯誤。
更正將使用:
set "value=Hello world"
現(xiàn)在命令的整個參數(shù)集用雙引號括在一起。因此,在分析行時忽略了以下內(nèi)容:
- 命令之間的所有空格/制表符
集
第一個雙引號, - 第一個雙引號,
- 最后一句雙引號,
- 和所有可能存在的空格/制表符后,最后雙引號。
所以.Hello world
分配給具有名稱的變量。value
.
有關(guān)將字符串正確分配給環(huán)境變量的詳細信息,請閱讀為什么在命令行上使用‘set var=text’之后沒有帶有‘echo%var%’的字符串輸出?它還包含一個簡單的演示批處理代碼。
更多信息:
在中間某個位置包含一個或多個引號的參數(shù)字符串是如何解釋的,這分別取決于應(yīng)用程序的命令。用1或更多解釋論點的行為"
在參數(shù)字符串中,可以根據(jù)使用的編譯器而變化,如批處理文件:列出特定文件夾中的rar文件,并將結(jié)果寫入文本文件。當然還有命令/應(yīng)用程序的源代碼。
對于大多數(shù)命令和應(yīng)用程序,正確的語法是:
command "parameter in quotes"
"Path to application\app.exe" "parameter in quotes"
但是,有些應(yīng)用程序需要參數(shù)字符串中間的引號。這樣的應(yīng)用程序的一個例子是Windows資源管理器.
打開探險家窗口中顯示當前目錄的批處理文件中的。
explorer.exe /e,"%CD%"
不工作的有:
explorer.exe "/e,%CD%"
explorer.exe /e "%CD%"
所以explorer.exe
要求在之后指定要打開的目錄。/e,
在參數(shù)字符串中間加上引號,或者解釋"/e,%CD%"
分別"/e %CD%"
作為要顯示路徑的目錄的名稱。探險家窗戶。
另見SS64-Windows Explorer命令行選項.