Eu dei uma olhada em várias dicas (Redirecionamento de comando ss64.com) e truques, mas não consegui encontrar uma resposta para minha pergunta:
Pergunta
É possível canalizar o comando que irei executar para a mesma saída redirecionada que irei criar?
Exemplo com netstat
Comando de entrada
C:\Users\memyselfandi> netstat -obna >C:\temp\netstat_with_programs.txt
O comando real seria:netstat -obna >C:\temp\netstat_with_programs.txt
Saída (o arquivo de texto netstat_with_programs.txt)
Este é o conteúdo real do netstat_with_programs.txt
arquivo. (O comando basicamente se documenta no arquivo de saída.)
netstat -obna >C:\temp\netstat_with_programs.txt
Active connections
Proto Local Address Remoteaddress State PID
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 888
RpcSs
[svchost.exe]
TCP 0.0.0.0:2382 0.0.0.0:0 LISTENING 1396
[sqlbrowser.exe]
TCP 0.0.0.0:3389 0.0.0.0:0 LISTENING 376
TermService
[svchost.exe]
....
Exemplo com arp
Comando de entrada
C:\users\memyselfandi> arp -a >C:\temp\arp_output.txt
O comando real é:arp -a >C:\temp\arp_output.txt
Saída (o conteúdo de arp_output.txt)
Este é o conteúdo real do arp_output.txt
arquivo. (O comando basicamente se documenta no arquivo de saída.)
arp -a >C:\temp\arp_output.txt
Interface: 10.57.209.191 --- 0x5
Internet Address Physical Address Type
10.57.209.2 80-e0-1d-58-8a-50 dynamic
10.57.209.3 80-e0-1d-58-8b-88 dynamic
10.57.209.9 00-50-56-8d-91-fe dynamic
10.57.209.10 00-50-56-8d-91-fe dynamic
10.57.209.175 00-50-56-b5-44-16 dynamic
10.57.209.255 ff-ff-ff-ff-ff-ff static
224.0.0.22 01-00-5e-00-00-16 static
224.0.0.252 01-00-5e-00-00-fc static
230.0.0.1 01-00-5e-00-00-01 static
239.255.255.250 01-00-5e-7f-ff-fa static
Então, basicamente, eu documentaria o comando que estou executando na saída que estou criando.
Com base nas possíveis soluções fornecidas por @barlop nos comentários, segui em frente e executei os dois comandos:
Com ECO
echo netstat -obna >C:\temp\netstat_with_programs.txt && netstat -obna >>C:\temp\netstat_with_programs.txt
... isso produziu a seguinte primeira linha no arquivo de saída, que não atende totalmente aos requisitos:
netstat -obna
....
Com variável %aaa%
set aaa=netstat -obna
echo (%aaa%>C:\temp\netstat_with_programs.txt) && (echo %aaa%|cmd)>>C:\temp\netstat_with_programs.txt
... isso produz a mesma saída, que não atende totalmente aos requisitos:
netstat -obna
...
Responder1
Isso é impossível porque o shell, que recebe o comando e o executa, não tem ideia do que fazem os argumentos que está passando para o comando.
Por exemplo, em nossa teoria rot13write
C:\foobar.txt
, éP:\sbbone.gkg
rot13write -qevir "P" -svyr "sbbone" rkg ".gkg"
Isso pode indicar rot13write
para gravar na unidade P
, no arquivo foobar
e na extensão txt
. Ou pode ser tudo uma piada e esse caminhopoderiajá foram codificados no executável. Você não sabe, e nem uma concha.
Então a casca podenãoecho para o arquivo no qual um programa está gravando misteriosamente, porque o shell não sabe disso o suficiente; e o programa que sabe como é invocado não tem obrigação de fazer nada com esses dados (como imprimir o comando de invocação no arquivo para o qual está sendo enviado). O que você pode fazer é
- Faça com que o shell ecoe todos os seus comandos. A maioria dos shells suporta isso.
- Faça com que o programa que você executa grave na saída padrão (como normalmente faz), que o programa herdará do shell que o gerou (é assim que os programas que você chama e o shell gravam no mesmo local - o terminal psuedo)
- Redirecione a saída padrão do shell para o arquivo de destino.
Isso fará tudo o que você quiserexcetomostre o sinalizador e o local de saída no comando.
Isso se parece com isso emprompt de comando (eu acho)
cmd /c "netstat" > myOutput.txt | type myOutput.txt
E fica assim no PowerShell,
powershell -command "Set-PSDebug -Trace 1; netstat" | tee myOutput.txt
Responder2
Se o problema for exibir (ou redirecionar para um arquivo) o símbolo de redirecionamento ( >
) com o ECHO
comando, então você só precisa escapar dele. O símbolo de escape neste caso seria ^
:
ECHO netstat -obna ^>C:\temp\netstat_with_programs.txt >C:\temp\netstat_with_programs.txt
netstat -obna >>C:\temp\netstat_with_programs.txt
O segundo comando no trecho acima está sendo usado >>
em vez de >
porque você deseja adicionar a saída ao mesmo arquivo em vez de substituí-la.