題 在Windows命令行上設置變量時防止額外空間


設置這樣的變量時:

> set foo=hello && echo test

那麼變量foo的值包含一個額外的不需要的空間:

> echo "%foo%"
"hello "

如何防止這個額外空間?當我省略時,它就消失了 && echo test 部分,但我需要使用 && 出於其他原因。


4
2017-10-20 09:34


起源




答案:


set foo=hello&& echo test

在這里工作正常,

echo "%foo%"

版畫

"hello"

:)


3
2017-10-20 09:44



接受,但現在我很好奇你將如何設置一個以&&結尾的值。用^轉義似乎不起作用。 - wcoenen
我也想不出來!當你使用變量時,轉義只是使&&繼續進行,但是在它們周圍加上“”使它接受字符串很好 - 然後它就在它周圍。 - Phoshi
這就是人們討厭的原因 cmd.exe - grawity
我不知道,使用cygwin和一些 - 很多 - 在python和c中編寫腳本它非常可行。而是有一個windows-y bash,但是你要做什麼。 - Phoshi
@wcoenen:好好用 set "foo=hello&&" in that case. Quoting helps sometimes, you know :-). Of course, when using the variable you still need to be careful to not let the &`通過不加引號。如果您知道在變量上運行了多少個解析通道,您還可以直接嵌入轉義字符。 - Joey


你可以這樣做

設置“foo = hello”&& echo test


9
2018-04-24 14:35



這就是答案。使用delayedexpansion,您甚至可以:set "foo=hello" && echo !foo! 它會回來 hello。這很有幫助。謝謝 - dgo
是的,這應該是正確的答案 - jvverde
這是我希望的答案。當前接受的答案雖然有效,但可讀性較低的.bat文件 - waterjuice


如其他答案所示, 在一個結尾的空間 set 命令很重要, 所以,如果你輸入

set foo = hello&echo test
甚至

設置foo =你好&空白

(哪裡 &blank 代表一個空間), %foo% 設置為六個字符的字符串 hello 

我有類似的空間問題 echo將字符串輸出到輸出文件。 毫不奇怪(鑑於上述情況),

echo hello >myfile

寫六個字符的字符串 hello (加上CR和LF) 到了文件,而

echo hello> myfile

不包括空間。 但是命令行末尾的空格仍然是個問題。 如果,出於某種原因,你說

echo hello> myfile&blank
然後你會在輸出的末尾得到一個空格。 當我刪除文件名後的空格時, 輸出結束時的空間消失了。

很奇怪,但這對我有用。


1
2017-09-11 15:54



這是評論還是答案? - Pimp Juice IT


set "foo=hello"

這幫助我填補了這條線

FOR /f "tokens=2 delims=><" %%a IN ('TYPE %GCV_CONFIG_FILE% ^| FIND "<%GCV_VALUE_NAME%>"') DO SET "%GCV_VARIABLE_NAME%=%%a" && echo %GCV_VARIABLE_NAME%=%%a >> %SessionLOG%

花了一些時間來弄清楚如何在變量的末尾刪除空格。 希望這有助於某人


1
2018-01-30 11:31