2010-07-24 15 views
5

Nie można znaleźć szczegółowych informacji o korzystaniu z maski plików w pliku wsadowym. Moje wymóg,Plik wsadowy: maska ​​pliku

forfiles -p "C:\what\ever" -s -m *.log -c "cmd /c somecommmand" 

zamiast wybraniu wszystkich plików dziennika (* .log), jak wybrać wszystkie pliki dziennika, który ma się przyrostek całkowitą na końcu. Np Wśród poniższych plików,

test.log, test1.log, test2.log, test3.log.. 

muszę maskę pliku, aby wybrać wszystko z wyjątkiemtest.log

Próbowałem test*.log, ale slects test.log również. Preferowane jest nie dołączanie części nazwy pliku (testu). coś w stylu, *<0-9d>.log.

dzięki.

Odpowiedz

0

spróbować test?.log

+0

Nie działa - możesz go wypróbować w powłoce: 'echo> test.log; echo> test1.log; dir test? .log' znajdzie 2 pliki. – schnaader

1

Jak test?.log a nawet test??.logbędzie znaleźć test.log też, jedyną rzeczą, aby dostać to, czego chcesz byłby jakiś rodzaj obejścia, na przykład:

if exist test.log ren test.log test.tmp 
REM Do your stuff here, you can now use test*.log 
if exist text.tmp ren test.tmp test.log 

I don nie wiesz, czy to nieoczekiwane zachowanie? (nie oznacza dokładnie jednej postaci, ale co najwyżej jednej postaci) jest czymś charakterystycznym dla systemu Windows lub podobnym do tego od czasu DOS, ale może być bardzo denerwujące.

+0

dziękuję .. Mógłbym sprawić, żeby to działało w ten sposób, również potwierdziłeś, że nie ma rzeczy typu regex w skryptach wsadowych. – bsr

1

można spróbować następujące dane, które ja osobiście uważam, jest straszna, ale to może być tylko to, czego potrzebujesz:

FOR %i IN (1 2 3 4 5 6 7 8 9 10 11 12 13 ...) DO IF EXIST test%i.log (somecommand) 

Jeśli przyrostek jest naprawdę dowolną liczbę całkowitą w potencjalnie bardzo szerokim zakresie, to nie zadziała —, chyba że zagnieździsz kilka pętli FOR, gdzie każda zajmie tylko jedną cyfrę, a zmienisz IF EXIST test%i.log na coś podobnego do IF EXIST test%a%b%c%d.log (na cztery cyfry).

Ponadto, nie ma potrzeby wykonywania somecommand w osobnej powłoce (CMD /C), o ile nie jest to w rzeczywistości to, co należy zrobić.

+0

dzięki .. +1 za pomysł. – bsr

+1

Co z 'dla/l'? – Joey

+0

* @ Johannes Rössel: * To, miły Panie, byłby mądrzejszy od tego, co sugerowałem. ;-) (Nauczyłem się czegoś nowego dzisiaj ...) – stakx

1

Aby dopasować nazwy plików na wyrażeniach regularnych w pliku wsadowym można użyć następujących pętli jako szablonu:

for /F "delims=" %%I in ('"dir /B /S | findstr /E "\\test[0-9][0-9]*\.log""') do (
    echo %%I 
) 

To po prostu wyświetla pełne ścieżki wszystkich plików w bieżącym katalogu i jego sub katalogi, których nazwa pasuje do test1.log, test2.log, test3.log, ...

Komenda dir tworzy listę drzewa katalogów z bieżącego katalogu. Każda linia zawiera pełną ścieżkę. Lista jest przesyłana za pomocą polecenia findstr, które dopasowuje pełne ścieżki do podanego wyrażenia regularnego. W każdej iteracji zmienna for %%I zawiera pełną ścieżkę pliku, który był zgodny z wyrażeniem regularnym.

+0

Spróbuję tego .. dzięki .. – bsr

Powiązane problemy