2010-07-24 161 views
5

我無法找到有關如何在批處理文件中使用文件掩碼的詳細信息。我的要求,批處理文件:文件掩碼

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

,而不是選擇所有的日誌文件(* .LOG),如何選擇所有具有在最後一個整數後綴的日誌文件。例如,在下面的文件,

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

我需要一個文件掩碼選擇所有除test.log

我試過test*.log,但slects test.log中也是如此。最好不要包含文件名稱部分(測試)。例如,*<0-9d>.log

謝謝。

回答

0

嘗試test?.log

+0

無法正常工作 - 您可以在shell中試用它:'echo> test.log; echo> test1.log; dir test?.log'會找到2個文件。 – schnaader 2010-07-24 17:17:04

1

由於test?.log甚至test??.log發現test.log也是如此,唯一得到你想要的是某種類型的解決辦法,比如什麼:

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 

我不'不知道這種意外的行爲? (並不意味着只有一個字符,但最多隻有一個字符)是Windows特有的,或者從DOS開始就是這樣的,但它可能非常煩人。

+0

謝謝..我可以這樣工作,也確認了批處理腳本中沒有正則表達式。 – bsr 2010-07-24 23:54:03

1

你可以嘗試以下方法,我個人認爲是可怕的,但它可能只是你需要什麼:

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

如果後綴是真是任何整數在可能範圍很廣,這將不起作用—,除非您嵌套多個FOR循環,其中每個只處理一位數字,並且您將IF EXIST test%i.log更改爲IF EXIST test%a%b%c%d.log(對於四位數字)。

此外,沒有必要在單獨的shell(CMD /C)中執行somecommand,除非當然這實際上是您需要執行的操作。

+0

感謝.. +1的想法。 – bsr 2010-07-24 23:54:21

+1

'for/l'呢? – Joey 2010-07-28 07:36:26

+0

* @ JohannesRössel:*那位仁慈的先生,實際上會比我建議的更聰明。 ;-)(我今天學到了新東西......) – stakx 2010-07-28 18:41:08

1

要對正則表達式匹配文件名中的一個批處理文件,你可以使用循環作爲模板如下:

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

這只是簡單地打印在當前目錄及其子目錄中的所有文件的完整路徑目錄名稱與test1.log,test2.log,test3.log ...

dir命令從當前目錄生成目錄樹的列表。每行包含完整路徑。該列表通過findstr命令傳遞,該命令匹配給定正則表達式的完整路徑。對於每次迭代,變量%%I都包含與正則表達式匹配的文件的完整路徑。

+0

我會試試這個..謝謝.. – bsr 2010-07-25 12:34:42