ファイル名のみ(拡張子やファイルパスではない)を再帰的に取得しようとする小さな障害に遭遇しました。これはルートフォルダーで私にとってはうまくいきました:
dir /b
しかし、再帰的にスキャンするために/ sを追加すると、不要なファイル名の前にファイルパスも取得しました。ディレクトリ内のすべてのサブフォルダーから裸のファイル名を取得する方法はありますか?
Windows 7 x64のIM PSまたはVBSではなく通常のコマンドプロンプトを使用したい
次のコマンドを使用します。
dir /b /a /s
出力をファイルに保存する必要がある場合は、以下を使用できます。
dir /b /a /s >> list_of_names.txt
編集実際には、上記の解決策は元の質問の目標に達していません。私が質問から気付いたことの1つは、投稿が再帰的なリストを要求することです。他の回答には欠けているので、他の回答者の回答に「/ s」を追加するとうまくいくと思います
for /f %a in ('dir /b /s') do @echo %~na
これを試して:
for /f "delims=" %a in ('dir /b /s') do @echo %~na
Forの動作とその動作の詳細については、for /?
と入力してください
_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\
_、現在のディレクトリが想定されます)、セット_(*)
_で一致する各ファイルに対してdoで指定されたコマンドを実行します。セット_(.)
_は、ディレクトリのみに一致します。 @echo%〜niこのコマンドは、プロンプトからそのまま機能します。あなたがそれをバッチファイルの中に置くならば、あなたの引用を倍増してください。つまり、for /r %%i in (*) do @echo %%~ni
forfilesアプローチの説明
_/s
_は、現在およびすべてのサブディレクトリを列挙します
_/c
_引用符内のコマンドを実行します
_@isdir
_および_@fname
_は、コマンド文字列に出力されるシンボルです
追加のバッチファイル_noquotes.bat
_は、二重引用符を%〜1(パラメーター1)で取り除くことで役立ちますforfiles
では、_forfiles /P C:\Windows ...
_で始まるパスを指定することもできます