Wiersz poleceń systemu Windows - wyjście potoku operacji wyszukiwania katalogu do operacji (obcinania)


2

To jest Windows 10. Pytanie jest bardzo proste, po prostu nie znam odpowiedniej składni, aby to zrobić.

Spowoduje to wyświetlenie wszystkich plików z rozszerzeniem .log:

dir /s /p *.log

Spowoduje to obcięcie pliku:

echo|set /p=>"myfile.log"

To, co chciałbym zrobić, to przesłać dane wyjściowe pierwszej operacji do drugiej operacji, tym samym obcinając pasujące pliki zwrócone przez dir. Jak mam to zrobić?


Czy chcesz wyczyścić każdy dziennik w katalogu z wszelkich danych wejściowych?
Seth

Tak, Seth to prawda.
Oliver Williams

Odpowiedzi:


1

Rurociągi do normalnego cmd nie są tak powszechne w systemie Windows. Więc dla cmd prawdopodobnie będziesz musiał uzyskać listę tych plików w zmiennej i użyć pętli for do ich przetworzenia. Być może możesz również bezpośrednio użyć dirpolecenia w pętli.

Wybrałbym PowerShell, który działa podobnie, ale moim zdaniem jest bardziej czytelny:

Get-ChildItem -Recurse -Filter "*.log" | Clear-Content

Jeśli chcesz potwierdzić każdy pojedynczy plik ( /Pna twoim dirwstrzymuje każdy ekran), możesz użyć -Confirmwłącznika Clear-Content.

Jeśli chcesz użyć pętli for z dowolnego powodu i użyć echa, którego możesz użyć:

Get-ChildItem -Recurse -Filter "*.log" | %{ echo $null > $_; }

Zajrzę do PowerShell. Być może link do tego dla przyszłych widzów tego postu. Dzięki.
Oliver Williams,

Próbowałem tego i z powodzeniem dodałem -Recurse i -Filter exactfilename.log, jednak PowerShell nie lubi znaku *
Oliver Williams

Co masz na myśli, że nie lubi gwiazdki? Umieściłeś to w cytatach?
Seth

0

Aby po prostu zebrać dane wyjściowe katalogu w pliku dziennika, upuść / p i przekieruj katalog / s * .log> mój_plik.log

Spowoduje to utworzenie nowego pliku, usuwając wszystkie poprzednie treści.

Jeśli chcesz uzyskać pełną ścieżkę w każdej linii, zamiast listowania według podkatalogów, użyj / b katalog / s / b * .log> mój_plik.log


Leo, nie tego chcę robić. Chcę obciąć pliki dirzwracane do 0 bajtów - nie zapisywać niczego na myfile.log. Nie ma pliku myfile.log - to tylko przykład. Edytowałem mój post, aby to wyjaśnić.
Oliver Williams

0

Jak obciąć pasujące pliki zwrócone przez dir /s /p *.log?

Użyj następującego pliku wsadowego (test.cmd):

@echo off
setlocal
for /f "tokens=*" %%f in ('dir /b /s *.log') do (
  echo|set /p=>"%%f"
  )
endlocal

Przykładowe użycie:

> dir /s /p *.log
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

02/10/2016  17:02             2,305 test.log
               1 File(s)          2,305 bytes

 Directory of F:\test\test

02/10/2016  17:02             2,305 test.log
               1 File(s)          2,305 bytes

 Directory of F:\test\test with space

02/10/2016  17:02             2,305 test.log
               1 File(s)          2,305 bytes

     Total Files Listed:
               3 File(s)          6,915 bytes
               0 Dir(s)  1,737,619,595,264 bytes free

> test

> dir /s /p *.log
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

24/11/2016  10:39                 0 test.log
               1 File(s)              0 bytes

 Directory of F:\test\test

24/11/2016  10:39                 0 test.log
               1 File(s)              0 bytes

 Directory of F:\test\test with space

24/11/2016  10:39                 0 test.log
               1 File(s)              0 bytes

     Total Files Listed:
               3 File(s)              0 bytes
               0 Dir(s)  1,737,619,607,552 bytes free

Dalsza lektura

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.