2012-03-22 14 views
0

バッチスクリプティングの新機能で、ここに問題があります:c:\ドライブ全体で7文字の名前のテキストファイルをすべて一覧表示し、ファイルに出力するように求められました。私はそれを理解することはできません。私はこれを作ってみたグーグルの検索の無限時間後バッチスクリプト - FORとIF

for /R C:\ %i in (.\*) do if %~ni==???????.txt echo %i > file.txt 

今、私はこれはおそらく実際に間違っている理解して...それは働いていません。

ありがとうございます。 John W.

答えて

3

を持っている場合、私はこれはそれを行うだろうと思い、後でファイル名をテストします。これにはファイルのバッチは実際には必要ありません。

dir /s /b C:\*.txt | findstr "\\.......\.txt$" > files.txt 

更新:

はそれが123\123.txt使用

dir /s /b C:\*.txt | findstr "\\[^\\][^\\][^\\][^\\][^\\][^\\][^\\]\.txt$" > files.txt 
+0

これは私の解決策より少しスマートです – jeb

+0

優秀!私は完全な間違ったトラックにいた、すばやい応答のおかげで! – JohnW

+0

@jebしかし、私はあなたが正しいと思っていたので、もっと頑張っていなければなりませんでした:) @ JohnW正規表現に '$'を追加しました。 – adarshr

0

コードをバッチファイルに入れて、FOR-Loopのパーセント記号を倍にしなければなりません。
FOR/Rはファイルマスクの検索のような素敵な機能をサポートしているので、これを使うことができます。

ただし、疑問符の数の最大値を持つすべてのファイルを検索するだけでなく、マッチを一致させることができます。
は、したがって、私は、それは少なくとも7つの文字

setlocal EnableDelayedExpansion 
for /R C:\temp\ %%i in (???????.txt) do (
    set "filename=%%~ni" 
    if "!filename:~6,1!" NEQ "" (
    echo has 7 characters %%i 
) 
) 
+0

のために動作させるために私が把握するために迅速な対応のおかげで、しかし、以下の解決策は少し楽でした。あなたのことは簡単ではありませんでしたが、私はすでに十分に混乱していました。 1つの質問、FORコマンドの 'set'パラメータは、 "??????。txt"という文字列ではなく、一連のファイルを必要としませんか? – JohnW