Por que a linha de comando do Windows altera o comando ao executar a partir de um arquivo .bat?

1

Se eu quiser executar o comando

md5deep -rb . | find /I ".jpg" | sort > local.md5

e eu o executo a partir do prompt de comando, ele mostra exatamente como eu digitei, mas quando eu colocá-lo em um arquivo .bat e executá-lo, é isso que eu vejo:

md5deep -rb .   | find /I ".jpg"   | sort  1>local.md5

Parece que ele insere tabulações antes de | e transforma > em 1> . Por quê? Primeiro, pensei que fosse algo relacionado à codificação, mas o arquivo é apenas um arquivo ANSI simples.

Tem algo a ver com @@ transformando @ em arquivos .bat?

    
por hyperknot 20.03.2011 / 22:18

2 respostas

3

Não é nada para se preocupar. É apenas a forma como o parser CMD do Windows exibe as linhas quando você não suprime a saída "trace" usando:

@echo off

ou

@commandname

Não sei ao certo o que você está se referindo em relação a @@ versus @ (exceto possivelmente o acima). Eu não sei nada de especial sobre @@ , a menos que você esteja confundindo com %% versus % para nomes de variáveis.

    
por 21.03.2011 / 01:29
1

O 1 > refere-se a como o padrão está sendo redirecionado dentro do arquivo bat.

Você tem dois canais, um para saída padrão (1 >) e um para saída de erro padrão (2 >). Eles usam 1 > ou 2 > para processamento e fornecer dois tipos diferentes de feedback de execução. Eu tenho essa lista para diferentes permutações de redirecionamento:

command > file      Write standard output of command to file
command 1> file     Write standard output of command to file (same as previous)
command 2> file     Write standard error of command to file (OS/2 and NT)
command > file 2>&1     Write both standard output and standard error of command to file (OS/2 and NT)
command >> file     Append standard output of command to file
command 1>> file    Append standard output of command to file (same as previous)
command 2>> file    Append standard error of command to file (OS/2 and NT)
command >> file 2>&1    Append both standard output and standard error of command to file (OS/2 and NT)
commandA | commandB     Redirect standard output of commandA to standard input of commandB
commandA 2>&1 | commandB    Redirect standard output and standard error of commandA to standard input of commandB (OS/2 and NT)
command < file  command gets standard input from file
command 2>&1    command's standard error is redirected to standard output (OS/2 and NT)
command 1>&2    command's standard output is redirected to standard error (OS/2 and NT)

Este é o excelente site de Rob van der Woude sobre scripts Win32: link

Rob

    
por 22.03.2011 / 20:13