2009-07-26 12 views
10

ファイル名のみ(拡張子を除いたもの)が数字のパターンのみと一致するように、ディレクトリ内のファイルを一覧表示するためにバッチファイルを使用しようとしています。正規表現[\ d] + \。pdfとして簡単に表現できる125646543.pdfのようなものですが、もちろん私はWindowsのみの仕組みでこのような細心の注意を払っていません...私はWindows-私はターゲットサーバ上に他のものをインストールすることはできません。少なくともWindows Server 2000とWindows 2003ではサポートされている必要があります。Windowsの先進的なファイルの照合

この特定の例や何かより一般的なものあなただけのものより進んだ*と?

すでにファイル名に数字を追加するためにset/aを使用しようとしましたが、文字列が環境変数として解釈され、定義されていない場合は0と解釈されるため、うまく動作しません。私もif %%〜na GTR 0を使ってみましたが、report.pdfのようなテキストファイル名にもマッチしました。この場合、文字列の比較が行われるようです。

+1

が、私はこれがserverfaultのに属していないかなり確信してお読みください。 Cmd.exeは初期の(脳死の)日に悪いラップを獲得しているかもしれませんが、まだそれでもプログラミングしていました。現代のcmd.exeは、今日ではもっと強力です。これは、bashスクリプトと同様に多くのプログラミングに関連しています。 – paxdiablo

答えて

21

findstr Windowsでは正規表現を使用できます。私が試してみた:

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

"dir /b"

はあなただけのファイル名を1行に1つずつ与えます。正規表現は、1つ以上の数字の後ろにピリオドと、その後に希望の拡張子が続くものと一致します。任意の拡張子について、次のようにすることができます。

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

+0

まさに私が探していたものです。私はfindstrを見逃したとは信じられない!どうもありがとう。 – HerbCSO

2

Windowsはwin98以降の改良されたプログラミングツールを提供しています。その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

+0

あなたは絶対に正しいですが、VBScript/JScriptが安全でないと考えられていたので、私はPaxの提案を好むので、VBScript/JScriptを無効にした多くの企業環境に遭遇しました。しかし、提案に感謝します! – HerbCSO

+1

彼らはそれらを使用する人々と同じくらい安全です。適切なコントロール、すなわち、許可されたユーザーに正しいアクセス許可を与えることで、vbscriptを使用するとバッチを使用する場合と違いはありません。 – ghostdog74

+3

私はまったく同意しますが、私はセキュリティポリシーを作成せず、行う人は必ずしも同じ方法で見ているわけではありません。 ;] – HerbCSO

関連する問題