2009-07-26 61 views
10

我想使用一個批處理文件來列出目錄中的文件,這樣只有文件名(減號擴展名)只能匹配數字模式,例如,像125646543.pdf,這將很容易表達爲正則表達式[\ d] + \。pdf,但當然,我沒有這樣的純粹Windows僅有的機制......我試圖用Windows來做到這一點 - 只有機制,因爲我無法在目標服務器上安裝其他任何設備,並且至少在Windows Server 2000和2003上需要支持。Windows高級文件匹配

我將針對此特定示例或某種更通用的具有某些特定功能的解決方案比老年人更先進*和?

我已經嘗試使用set/a來爲文件名添加一個數字,但是因爲它將字符串解釋爲環境變量,如果它們沒有定義,則爲0,這樣做效果不佳。我也嘗試過使用%%〜na GTR 0,但是它也匹配文本文件名,例如report.pdf,因爲它似乎在這種情況下進行了字符串比較。

+1

我敢肯定這不會對serverfault屬於。 Cmd.exe在早期(腦死亡)時期可能受到了不好的說唱,但即使如此,它仍然在編程。現代的cmd.exe現在更加強大。它和bash腳本一樣多的編程。 – paxdiablo 2009-07-26 04:14:34

回答

21

findstr可以在Windows下做正則表達式就好了。我想嘗試:

dir /b | findstr /i "^[0-9][0-9]*\.pdf$" 

"dir /b"只給你的文件名,每行一個。該正則表達式匹配一個或多個數字,後跟一個句點,後跟您所需的擴展名。對於任何擴展,你可以這樣做:

dir /b | findstr "^[0-9][0-9]*\.[^\.]*$" 

顯然,如果有其他情況更復雜,你可以調整正則表達式來適應。它沒有UNIX正則表達式的全部功能,但它相當好。

以下命令文件顯示瞭如何處理當前目錄中符合您的「全數字」要求的每個pdf文件。

@echo off 
setlocal enableextensions enabledelayedexpansion 
for /f "usebackq" %%i in (`dir /b ^| findstr /i "^[0-9][0-9]*\.PDF$"`) do (
    set fspec=%%i 
    echo.Processing !fspec! 
) 
endlocal 

該網站http://www.robvanderwoude.com/batchfiles.php是CMD文件魔術(還有更多的東西)一個非常好的資源。

+0

如果您使用`/ i`開關執行不區分大小寫的搜索:`findstr/i「^ [0-9] [0-9] * \。pdf $」` 。 – Helen 2009-07-26 07:33:13

+0

正是我在找的東西。不能相信我錯過了發現!非常感謝。 – HerbCSO 2009-07-26 12:29:02

2

從win98開始,windows爲您提供了一個改進的編程工具。它叫vbscript。

Set objFS = CreateObject("Scripting.FileSystemObject") 
strFolder = "c:\test" 
Set objFolder = objFS.GetFolder(strFolder) 
For Each strFile In objFolder.Files 
    strFileName = strFile.Name 
    strExtension = objFS.GetExtensionName(strFile) 
    strBase = objFS.GetBaseName(strFile) 
    If IsNumeric(strBase) Then 'check if numeric 
     WScript.Echo strBase 
      'continue to process file here....... 
    End If 
Next 

關於VBScript的更多信息,請閱讀manual