web-dev-qa-db-ja.com

バッチを使用して特定の名前のすべてのファイルを検索して見つける方法は?

次のコマンドを実行しています。

@echo off
cls
for /r D:\ %%a in (*) do if "%%~nxa"=="new.txt" set p=%%~dpnxa
if defined p (
echo File found its path - %p%
pause
) else (
echo File not found !
pause
)

最終結果として、ドライブ全体のnew.txtフォルダーとサブフォルダーでD:という名前のファイルを検索し、そのファイルnew.txtのフルパスを以下のような出力として表示します( new.txtD:\folder\ファイルを想定)

File found and its path - D:\folder\new.txt
Press any key to continue . . . 

ただし、問題は、異なるフォルダまたはサブフォルダのドライブnew.txtに同じ名前D:のファイルが複数ある場合、1つのパス出力しか表示されないことです。

私の必要性は、以下の出力のように、ドライブnew.txt上の同じ名前D:のすべてのファイルパスを表示することです。

期待される出力このような必要性、

Files found : 4
Files Paths : 
1 - D:\folder\new.txt
2 - D:\new folder\new.txt
3 - D:\files\new.txt
4 - D:\folder\new\new.txt

pls help..Thx in Advance。

2
Philip

同じ名前のすべてのファイルパスを表示したいnew.txtドライブD:

期待される出力:

Files found : 4
Files Paths : 
1 - D:\folder\new.txt
2 - D:\new folder\new.txt
3 - D:\files\new.txt
4 - D:\folder\new\new.txt

次のバッチファイルを使用します。

@echo off
setlocal
rem change to the correct directory
cd /d d:\
rem count the files
dir /b new.txt /s 2> nul | find "" /v /c > %temp%\count
set /p _count=<%temp%\count
rem cleanup
del %temp%\count
rem output the number of files
echo Files found : %_count%
rem list the files
echo Files Paths :
dir /b new.txt /s
endlocal

  • Windows CMDコマンドラインのA-Zインデックス
  • Windows CMDコマンドの分類リスト
  • del -1つ以上のファイルを削除します。
  • dir -ファイルとサブフォルダーのリストを表示します。
  • endlocal -バッチファイルで環境変更のローカリゼーションを終了します。あるバッチファイルから別のバッチファイルに変数を渡します。
  • find -ファイル内のテキスト文字列を検索し、見つかったすべての行を表示します。
  • set --CMD環境変数を表示、設定、または削除します。 SETで行われた変更は、現在のCMDセッションの間のみ保持されます。
  • setlocal -バッチファイル内の環境変数の可視性を制御するオプションを設定します。
1
DavidPostill