Windows CMD.EXE не имеет встроенного средства для работы со специальными символами, такими как перевод строки или возврат каретки. Но есть известные хаки, которые могут дать вам доступ к нескольким часто нужным персонажам.
CarriageReturn (CR) 0x0D
Все, что нужно, это файл - любой файл. Предпочтительно файл должен быть небольшим, чтобы команда выполнялась быстрее. Содержимое файла не имеет значения. Это может быть даже пустым!
Команда COPY /Z печатает состояние завершения в процентах без LF, которое несколько раз приводит к CR, пока не достигнет 100%. Правильно сформированный оператор FOR может анализировать CR с начала строки. Затем вы можете использовать переменную FOR в своем утверждении.
D:\test>for /f "delims=1 " %A in ('copy /z test.txt nul') do @echo Good morning %A world!
world!rning
В сказанном "мир!"msgstr "перезаписывает начало" Доброе утро "из-за CR, содержащегося в переменной% A.
CR может быть помещен в переменную среды, чтобы его можно было использовать позже, но CR будет сохраняться только при использовании отложенного расширения. Отложенное расширение можно включить с помощью cmd /v:on
.
D:\test>cmd /v:on
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
D:\test>for /f "delims=1 " %A in ('copy /z test.txt nul') do set "CR=%A"
" \test>set "CR=
D:\test>echo Good morning !CR! world!
world!rning
D:\test>echo Good morning %CR% world! does not preserve the CR
Good morning world! does not preserve the CR
LineFeed (LF) 0x0A
LF может быть включен в команду напрямую, используя продолжение строки и введя пустую строку для представления экранированного LF, за которым следует остаток строки.
D:\test>echo hello^
More?
More? world!
hello
world!
LF может быть легко сохранен в переменной, где он может быть использован позже. Вы не можете просто использовать %LF%
, но вы можете использовать ^%LF%%LF%
для представления одного LF.
D:\test>set LF=^
More?
More?
D:\test>echo Hello^%LF%%LF%world!
Hello
world!
Или отложенное расширение может использоваться для удобного доступа к переменной LF
D:\test>cmd /v:on
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
D:\test>echo Hello!LF!world!
Hello
world!
Или может быть определена другая переменная, для которой встроена надлежащая escape-последовательность, так что переменная может использоваться напрямую с обычным расширением.
D:\test>set \n=^^^%LF%%LF%^%LF%%LF%
D:\test>echo Hello%\n%world!
Hello
world!
BackSpace (BS) 0x08
Подсказка может быть установлена на (BS)(space)(BS)
с помощью $ H, и одна BS может быть проанализирована с помощью цикла FOR. Символ BS может быть сохранен в переменной окружения для последующего использования.
D:\test>for /f %A in ('prompt $h^&for %a in (1^) do rem') do @set "BS=%A"
D:\test>echo ab_%BS%cd
abcd