2017-10-03 4 views
0

ファイル番号のリストを作成するのに、短い.batファイルを使用しています。たとえば:バッチファイルを制限する

C: 
cd\Users\garys\Documents 
dir *.xlsm /s /b > %userprofile%\Desktop\xlsm.txt 

のようなものが生成されます:

C:\Users\garys\Documents\My Spreadsheets\autocorrect.xlsm 
C:\Users\garys\Documents\My Spreadsheets\column id.xlsm 
C:\Users\garys\Documents\My Spreadsheets\control word.xlsm 
C:\Users\garys\Documents\My Spreadsheets\Data.xlsm 
C:\Users\garys\Documents\My Spreadsheets\Dinar.xlsm 

をしかし、私は使用している場合:

C: 
cd\Users\garys\Documents 
dir *.xls /s /b > %userprofile%\Desktop\xls.txt 

私の結果のテキストファイルはとして.XLS拡張子を持つファイルが含まれていますよくファイルとして.xlsmおよびxlsx拡張。

どのように私は.xlsmの.xlsxファイルを無視する.batスクリプトを変更できますか?

+2

'DIR'を' FINDSTR'コマンドにパイプし、 '/ E'オプションを使って文字列の最後にXLSを見つけるように指示します。 – Squashman

答えて

3
dir *.xls /s /b |findstr /i /e /C:".xls" > %userprofile%\Desktop\xls.txt 

は、データを提供する必要があります。

出力、大文字と小文字を区別しないようにし/eエンド/c:"this string"/iすべての行を検索しますfindstrからdirコマンド

1

この動作の理由はdir *.xlsも短いファイル名をチェックすることで、私が思うに、例えば、autocorrect.xlsmの場合はautoco~1.xlsのようなものです。

other answerに示すようfindstrによる追加のフィルタの代替の方法は、ビスタ以降のWindowsにネイティブである、where commandを使用することで、私は信じている、およびファイル名とワイルドカードの異なる取り扱いを行います。

cd /D "C:\Users\garys\Documents" 
where ".:*.xls" > "%userprofile%\Desktop\xls.txt" 

プレフィックス.:は、現在のディレクトリ内の一致するファイルのみが返されるようにします。それ以外の場合は、whereもシステムパスディレクトリ(pathと表示する)で検索されます。

whereコマンドの欠点は、それはまたPATHEXT変数(それらを表示するタイプset PATHEXT)で定義された拡張子を使用するため、ファイルsomething.xls.exePATHEXTがある場合(デフォルトごとに)リストに.EXEが含まれていることです、そのファイルも返されます。回避策としては、変数PATHEXTを一時的に削除することが考えられますが、その後すぐに復元する必要があります。

関連する問題