У меня был отличный трюк в Windows cmd.exe
(по крайней мере, до XP), чтобы эмулировать поведение эха UNIX без новой строки, echo -n
. Например, команда:
<nul: set /p junk= xyzzy
приведет к выводу ровно шести символов, начального пробела и строки «xyzzy», и ничего больше.
Если вам интересно, почему это работает, на самом деле это команда ввода, которая выводит
" xyzzy"
в качестве подсказки, а затем ожидает ввода пользователем, прежде чем назначить этот ввод переменной средыjunk
. В этом конкретном случае он не ожидает ввода данных пользователем, поскольку он получает ввод с устройстваnul
.
Это было довольно полезно в сценариях cmd
, когда (например) обработка файлов в цикле (одна итерация на файл), когда вы хотите перечислить более одного файла в строке. Используя этот трюк, вы можете просто выводить каждое имя файла, за которым следует пробел и без новой строки, а затем, после цикла, выводить новую строку для завершения:
Processing files:
file1.txt file42.txt p0rn.zip
Теперь я обнаружил, что в Windows 7 пробелы больше не выводятся, поэтому я получаю следующее:
Processing files:
file1.txtfile42.txtp0rn.zip
Есть ли способ заставить set /p
снова начать соблюдать мои пробелы, или в Win7 есть другой способ добиться того же эффекта?
Я пробовал цитировать, используя .
(который работает в echo
) и даже экранировал строку с помощью ^
, но ни один из них не работает:
C:\Pax> <nul: set /p junk= xyzzy
xyzzy
C:\Pax> <nul: set /p junk=" xyzzy"
xyzzy
C:\Pax> <nul: set /p junk=' xyzzy'
' xyzzy'
C:\Pax> <nul: set /p junk=. xyzzy
. xyzzy
C:\Pax> <nul: set /p junk=^ xyzzy
xyzzy
Мне нужно:
C:\Pax> some_magical_command_with_an_argument xyzzy
xyzzy
что даст мне пробел(ы) в начале и без новой строки в конце.