O Windows CMD.EXE não possui um recurso interno para trabalhar com caracteres especiais, como avanço de linha ou retorno de carro. Mas existem hacks conhecidos que podem lhe dar acesso a alguns caracteres frequentemente necessários.
CarriageReturn (CR) 0x0D
Tudo o que é necessário é um arquivo - qualquer arquivo. De preferência, o arquivo deve ser pequeno para que o comando seja executado mais rapidamente. O conteúdo do arquivo não importa. Pode até estar vazio!
O comando COPY / Z imprime um status de porcentagem de conclusão sem LF que leva com um CR repetidamente até atingir 100%. Uma instrução FOR formada adequadamente pode analisar o CR desde o início da linha. Você pode então usar a variável FOR em sua declaração.
D:\test>for /f "delims=1 " %A in ('copy /z test.txt nul') do @echo Good morning %A world!
world!rning
Acima, "mundo!" sobre-escreve o início de "Bom dia" por causa do CR contido na variável% A.
O CR pode ser colocado em uma variável de ambiente para que possa ser usado mais tarde, mas o CR só será preservado se a expansão atrasada for usada. A expansão atrasada pode ser ativada usando 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
Um LF pode ser incorporado em um comando diretamente usando continuação de linha e inserindo uma linha em branco para representar o LF com escape, seguido pelo restante da linha.
D:\test>echo hello^
More?
More? world!
hello
world!
O LF pode ser facilmente armazenado em uma variável onde possa ser usado mais tarde. Você não pode simplesmente usar %LF%
, mas você pode usar ^%LF%%LF%
para representar uma única LF.
D:\test>set LF=^
More?
More?
D:\test>echo Hello^%LF%%LF%world!
Hello
world!
Ou a expansão atrasada pode ser usada para acessar convenientemente a variável 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!
Ou pode ser definida outra variável que tenha a sequência de escape adequada incorporada para que a variável possa ser usada diretamente com a expansão normal.
D:\test>set \n=^^^%LF%%LF%^%LF%%LF%
D:\test>echo Hello%\n%world!
Hello
world!
BackSpace (BS) 0x08
O prompt pode ser configurado para (BS)(space)(BS)
usando $ H, e um único BS pode ser analisado usando um loop FOR. O caractere BS pode ser armazenado em uma variável de ambiente a ser usada posteriormente.
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