2010-07-24 20 views
5

Non sono riuscito a trovare dettagli su come utilizzare la maschera file in un file batch. La mia esigenza,File batch: maschera file

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

invece di selezionare tutti i file di log (* .log), come selezionare tutti i file di log che ha un suffisso intero alla fine. Ad esempio, tra i seguenti file,

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

Ho bisogno di una maschera di file per selezionare tutti trannetest.log

ho provato test*.log, ma che slects test.log pure. È preferibile non includere la parte del nome del file (test). qualcosa come, *<0-9d>.log.

grazie.

risposta

0

provare test?.log

+0

Non funziona - puoi provarlo in una shell: 'echo> test.log; echo> test1.log; dir test? .log' troverà 2 file. – schnaader

1

Come test?.log e anche test??.logsi trovare test.log, anche, l'unica cosa da ottenere quello che vuoi sarebbe qualche tipo di soluzione, per esempio:

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 Non so se questo comportamento inaspettato di? (non significa esattamente un personaggio, ma al massimo un personaggio) è qualcosa di specifico di Windows o è stato così dal DOS, ma può essere molto fastidioso.

+0

grazie .. Potrei farlo funzionare in questo modo, inoltre hai confermato che non c'è alcun tipo di regex nello script batch. – bsr

1

Si potrebbe provare la seguente, che personalmente credo sia terribile, ma potrebbe essere solo quello che vi serve:

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

Se il suffisso è davvero qualsiasi numero intero in una potenzialmente molto vasta gamma, questo non funzionerà — a meno che non nidiate più loop FOR, in cui ciascuno si occupa di una sola cifra e si modifica lo IF EXIST test%i.log in qualcosa come IF EXIST test%a%b%c%d.log (per quattro cifre).

Inoltre, non è necessario eseguire somecommand in una shell separata (CMD /C), a meno che, naturalmente, non sia effettivamente ciò che è necessario fare.

+0

grazie .. +1 per l'idea. – bsr

+1

Che dire di 'for/l'? – Joey

+0

* @ Johannes Rössel: * Questo, gentile signore, sarebbe in realtà più intelligente di quello che ho suggerito. ;-) (Ho imparato qualcosa di nuovo oggi ...) – stakx

1

per abbinare i nomi dei file con un'espressione regolare in un file batch è possibile utilizzare il seguente ciclo for come modello:

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

Questa stampa semplicemente i percorsi completi di tutti i file nella directory corrente e il suo sub directory, il cui nome corrisponde a test1.log, test2.log, test3.log, ...

Il comando dir produce un elenco dell'albero delle directory dalla directory corrente. Ogni riga contiene un percorso completo. L'elenco viene inviato tramite il comando findstr, che corrisponde ai percorsi completi rispetto all'espressione regolare specificata. Ad ogni iterazione, la variabile per %%I contiene il percorso completo di un file che corrisponde all'espressione regolare.

+0

Ci proverò .. grazie .. – bsr

Problemi correlati