tldr: executou um arquivo de lote com apenas uma linha: echo ^
. Este arquivo come 70-100% de um núcleo e aprox. 1k de RAM por segundo ... ???
Ao responder esta pergunta, me deparei com um comportamento estranho nos arquivos em lote do Windows.
Eu estava tendo algum arquivo em lote divertido para mostrar ao OP que você poderia ter um ^
no final de uma linha em um arquivo de lote para continuação de linha, por exemplo:
arquivo test.bat
:
echo How are ^
you today ^
my good fellow
A saída seria: How are you today my good fellow
Eu estava curioso para saber se o prompt de comando exibiria um More?
do arquivo em lote semelhante ao prompt de comando se você tivesse uma linha como essa em um arquivo em lote: echo Do you want some ^
Se você fez isso na linha de comando, ele mostrará More?
(como para mais entradas):
C:\>echo Do you want some ^
More?
No entanto, eu tentei esta linha (tendo apenas esta linha) em um arquivo em lotes e algum comportamento inexplicável aconteceu, então eu brinquei com o script para descobrir que a única vez que isso acontece é quando uma declaração
echo
é a última line e o
^
é o último caractere do arquivo de lote.
Um arquivo rápido para reproduzir:
arquivo test.bat
:
echo ^
A execução desse arquivo em lote na minha máquina Windows 7 de 64 bits consumiu 70 a 100% de um dos meus núcleos e consumia cerca de 1k de memória a cada segundo.
A execução deste arquivo também ignorou todas as entradas (exceto que a tecla CTRL+
pressiona para finalizá-lo), embora após o arquivo ter sido finalizado, a entrada ainda tenha sido liberada para o console:
C:\>test.bat
(nothing is happening here except CPU/RAM eating)
(I would proceed to type something like "HELLO")
CTRL+C (script ends)
C:\>HELLO
'HELLO' is not recognized an internal .....
Meu 'search-foo' (Stack Oveflow, Stack Exchange, MSDN, Google e Bing) não encontrou resultados que pudessem explicar esse comportamento estranho em um arquivo batch (somente o que o ^
faz em arquivos de linha de comando e batch ); Eu pensaria que, se a única linha em um arquivo de lote fosse echo ^
, seria apenas terminar o script e não ser executado até eu CTRL+C
sair dele?
Alguém mais percebeu esse comportamento ou poderia explicar o que poderia causar isso? Além disso, isso poderia levar a qualquer possibilidade de ataque a um sistema?
Não é um grande problema (não tenho arquivos em lote que terminem em echo ^
), mas me pareceu muito peculiar que 1 linha de resultados em lote em 1k / s ??
(Nota: vou tentar a mesma situação através de algumas linguagens de programação [.NET, Java e C / C ++] e alguns scripts web (JS talvez?) para ver o que acontece como resultado)