Запретить дополнительное пространство при установке переменной в командной строке Windows

6

При установке такой переменной:

> set foo=hello && echo test

тогда значение переменной foo содержит лишний ненужный пробел:

> echo "%foo%"
"hello "

Как я могу предотвратить это дополнительное пространство? Исчезает, когда я опускаю && echo test часть, но мне нужно использовать && по другим причинам.

wcoenen
источник

Ответы:

4

set foo=hello&& echo test

отлично работает здесь,

echo "%foo%"

печать

"hello"

:)

Phoshi
источник
принято, но теперь мне любопытно, как бы вы установили значение, заканчивающееся на & amp; Бежать с ^ не похоже на работу.
wcoenen
Я не могу понять это тоже! Побег просто делает & amp; переходите к тому, когда вы ИСПОЛЬЗУЕТЕ переменную, но если поставить вокруг них символ "", то она будет хорошо воспринимать строку.
Phoshi
2
И именно поэтому люди ненавидят cmd.exe
grawity
1
Я не знаю, с Cygwin и немного - много - сценариев на Python и C это довольно работоспособно. Скорее есть Windows-y Bash, но что ты собираешься делать.
Phoshi
1
@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 & amp; `через без кавычек. Если вы знаете, сколько проходов разбора выполняется над вашими переменными, вы также можете напрямую вставить escape-символы.
Joey
10

Вы можете сделать это

установить "foo = hello" & amp; эхо-тест

Michael Harvey
источник
Это ответ. С задержкой расширения вы можете даже: set "foo=hello" && echo !foo! и он вернется hello, Это было полезно. Спасибо
dgo
Да, это должен быть правильный ответ
jvverde
Это ответ, на который я надеялся. В настоящее время принятый ответ пока работает, делает для гораздо менее читаемых .bat файлов
waterjuice
1

Как указано в других ответах, пробелы в конце set команда значимы, так что если вы введете

set foo=hello & echo test
или даже
set foo=hello␣

(где ␣ представляет собой пространство), %foo% устанавливается в строку из шести символов h, e, l, l, o,  ,

У меня была похожая проблема с пространством, когда echo добавление строки в выходной файл. Не удивительно (в свете вышесказанного),

echo hello >myfile

пишет строку из шести символов h, e, l, l, o,   (плюс CR и LF) в файл, в то время как

echo hello> myfile

не включает пространство Но пробелы в конце командной строки остаются проблемой. Если по какой-то причине вы говорите

echo hello>myfile␣
тогда вы получите пробел в конце вывода. Когда я удалил пробел после имени файла, пространство в конце вывода исчезло.

Странно, но это сработало для меня.

Don Mikulec
источник
Это должен быть комментарий или ответ?
Pimp Juice IT
1
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%

Мне потребовалось некоторое время, чтобы понять, как удалить пробел в конце переменной. Надеюсь, это поможет кому-то

Jimmy Bowler
источник