コマンドプロンプトで裸のファイル名を再帰的に取得する


19

ファイル名のみ(拡張子もファイルパスも)を再帰的に取得しようとして、ちょっとした障害に遭遇しました。これは、ルートフォルダーで機能しました。

dir /b

しかし、再帰的にスキャンするために/ sを追加すると、不要なファイル名の前にファイルパスも取得しました。ディレクトリ内のすべてのサブフォルダーから裸のファイル名を取得する方法はありますか?

Windows 7 x64のIm PSまたはVBSではなく、通常のコマンドプロンプトを使用したい

回答:


15

次のコマンドを使用します。

dir /b /a /s
  • / bは、出力から日付およびその他の詳細を取り除きます
  • / aはファイル名のみを出力し、パスは出力しません
  • / sは、再帰的なディレクトリ一覧を有効にします

出力をファイルに保存する必要がある場合は、次を使用できます。

dir /b /a /s >> list_of_names.txt

編集実際、上記の解決策は元の質問の目標に到達しません。この質問から気づいたことの1つは、投稿が再帰的なリストを要求していることです。他の回答にはないため、他の回答者の回答に「/ s」を追加するとうまくいくと思います

for /f %a in ('dir /b /s') do @echo %~na

これを説明してもらえますか?私にはほとんど意味がありません。
サイモンシーハン

4
これは機能せず、/ aはそのようには機能しません。これは、リストするファイルのタイプのフィルターです。再帰的なディレクトリ一覧を作成するときに、ファイル名からパスを削除しません。
ガフ

答えを編集しました。そして、再びWindowsボックスを手に入れました。今回はそれを行うべきだと思います(win732bit)
Nik So

6

これを試して:

for /f "delims=" %a in ('dir /b /s') do @echo %~na

forの動作とその動作に関する詳細、タイプ for /?


これはほとんど動作しますが、大きなproblem.Itは、ファイル名だけが、その後「私の休暇の画像1」例えば、それだけの出力「私」であるfilename.Ifの最初の単語出力があります
TMRW

これを試してください:/ f "delims = |" %a in( 'dir / b')do @echo%〜na デフォルトでは、FORの/ fパラメータはスペースでトークン化されます。ファイル/ディレクトリ名に表示されるべきではない文字にトークンを設定すると、スペースを含む名前全体が表示されます。
スコットマッキーニー

あなたがしたい場合は、出力ファイル、APPENDに送信>> filename.txt
グルーバー

2
for /r %i in (*) do @echo %~ni

または

forfiles /s /c "cmd /c if @isdir==FALSE noquotes.bat @fname"

このコンテンツを持つ%PATH%のファイルnoquotes.batを想定

@echo %~1

/ rアプローチの説明

for /r現在のディレクトリを再帰的にウォークし(ディレクトリを指定できます。for /r drive:\path\現在のディレクトリが想定されます)、setで一致した各ファイルに対してdoで指定されたコマンドを実行します(*)。セット(.)はディレクトリのみに一致します。@echo%〜niこのコマンドは、プロンプトからそのまま機能します。バッチファイル内に引用符を配置する場合は、引用符を2倍にします。すなわちfor /r %%i in (*) do @echo %%~ni

forfilesアプローチの説明

/s現在列挙して、すべてのサブディレクトリには、
/c引用符内のコマンドを実行
@isdirし、@fnameコマンド文字列の中に放出されたシンボルである
余分なバッチファイルはnoquotes.bat%〜1(パラメータ1)と二重引用符をストリッピングすることによりことができます
forfilesまた、あなたがで開始するパスを指定することができますがforfiles /P C:\Windows ...


@DavidPostillはい、それは悪い答えでした。コメントしてくれてありがとう。回答をさらに改善できるかどうかをお知らせください。
JJS

@DavidPostillあなたは以前の回答やコメントがありません。あなたは質問をモデレートしていましたか、それとも答えを探していて、私の質の悪い答えにつまずきましたか?
JJS

「低品質の投稿」レビューキューに回答が表示されました。バッチファイルについて多くのことを知っているので、私はそれを詳しく調べました。
DavidPostill

@DavidPostillのレビューに感謝します。私の回答に加えた変更についてのレビューを歓迎します。
JJS

はるかに良い... :)
DavidPostill

-1

属性(ディレクトリではなく)を使用して、すべてのファイルを裸で再帰的に一覧表示します(ファイルのみ)

dir / B / S / A:-D

C:\ test \ cache> dir / B / S / A:-D

C:\ test \ cache \ 7 \ 0f \ 7b50ed0522645513da90345120eaf0f7 C:\ test \ cache \ d \ 23 \ 814644aa6a8195c91e54d2f7bb64e23d


質問では、OPは「ファイル名のみを取得しようとしています(拡張子やファイルパスは取得していません)。…しかし、私がdir /b /s再帰的にスキャンしようとしたとき、ファイル名の前にファイルパスも取得したので、これは望ましくありません。」 OPがそれを試みたときと同じ結果(つまり、彼らが望むものではない)を生成すること。
スコット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.