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
В вышесказанном "мир!" перезаписывает начало «Доброе утро» из-за 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