Sprawdziłem różne wskazówki ( Przekierowanie komendy ss64.com ) i sztuczki, ale nie mogłem znaleźć odpowiedzi na moje pytanie:
Pytanie
Czy możliwe jest wprowadzenie polecenia, które zamierzam wykonać, do tego samego przekierowanego wyjścia, które będę tworzył?
Przykład z netstat
Polecenie wejściowe
C:\Users\memyselfandi> netstat -obna >C:\temp\netstat_with_programs.txt
Rzeczywiste polecenie brzmi: netstat -obna >C:\temp\netstat_with_programs.txt
Wyjście (plik tekstowy netstat_with_programs.txt)
To jest rzeczywista zawartość netstat_with_programs.txt
plik. ( Polecenie zasadniczo dokumentuje się w pliku wyjściowym. )
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]
....
Przykład z arp
Polecenie wejściowe
C:\users\memyselfandi> arp -a >C:\temp\arp_output.txt
Rzeczywiste polecenie to: arp -a >C:\temp\arp_output.txt
Dane wyjściowe (zawartość arp_output.txt)
To jest rzeczywista zawartość arp_output.txt
plik. ( Polecenie zasadniczo dokumentuje się w pliku wyjściowym. )
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
Więc zasadniczo dokumentowałbym polecenie, które wykonuję w tworzonym przeze mnie wyjściu.
W oparciu o możliwe rozwiązania dostarczone przez @barlop w komentarzach, poszedłem dalej i wykonałem oba polecenia:
Z ECHO
echo netstat -obna >C:\temp\netstat_with_programs.txt && netstat -obna >>C:\temp\netstat_with_programs.txt
... spowodowało to powstanie następującego pierwszego wiersza w pliku wyjściowym, który nie spełnia w pełni wymagań:
netstat -obna
....
Z zmienną% aaa%
set aaa=netstat -obna
echo (%aaa%>C:\temp\netstat_with_programs.txt) && (echo %aaa%|cmd)>>C:\temp\netstat_with_programs.txt
... powoduje to taką samą wydajność, która nie spełnia w pełni wymagań:
netstat -obna
...
źródło
C:\temp\netstat_with_programs.txt
przed i po. Demonstrowanie dokładnie tego, co masz na myśli, a nie próbowanie użycia wysoce ambitnych słów.netstat -obna >C:\temp\netstat_with_programs.txt
. Wyjściem mojego polecenia jest plik tekstowy zawierający zawartość opisaną w Wydajność część mojego pytania, która zawiera polecenie, które wykonałem. Nie sądzę, aby moje pytanie było albo niejednoznaczne, albo składniowe, ortograficzne lub typograficznie niepoprawne. Byłbym wdzięczny, gdybyś mógł dokładnie wyjaśnić, której części pytania nie jesteś w stanie zrozumieć.>
plik wcześniej nie istniał. Nie dodaję (>>
) do istniejącego pliku.Odpowiedzi:
Jest to niemożliwe, ponieważ powłoka, która pobiera polecenie i wykonuje je, nie ma pojęcia, co robią argumenty przekazane do polecenia.
Na przykład w naszej teorii
rot13write
C:\foobar.txt
, jestP:\sbbone.gkg
To może powiedzieć
rot13write
napisać na dyskP
, plikfoobar
i rozszerzenietxt
. Albo może to być żart i ta ścieżka mógłby zostały już zakodowane w pliku wykonywalnym. Nie wiesz, ani powłoka.Więc powłoka może nie echo do pliku, do którego program tajemniczo pisze, ponieważ powłoka nie wie o tym wystarczająco; i program, który wie, jak się go wywołuje, nie ma obowiązku niczego robić z tymi danymi (np. wydrukować polecenie wywołania do pliku, do którego jest wysyłane). Co możesz zrobić, to
To zrobi wszystko, co chcesz z wyjątkiem pokaż flagę i lokalizację wyjściową w poleceniu.
To wygląda tak wiersz polecenia (chyba)
I wygląda to tak w PowerShell,
źródło
Jeśli problem polega na wyświetleniu (lub przekierowaniu do pliku) symbolu przekierowania (
>
) zECHO
polecenie, po prostu musisz uciec. W tym przypadku symbolem ucieczki będzie^
:Drugie polecenie w powyższym urywku używa
>>
zamiast>
ponieważ chcesz dodać wyjście do tego samego pliku, zamiast go nadpisać.źródło