このバッチ処理ですべてのサブフォルダーを検索するためのワイルドカードがありませんか?

このバッチ処理ですべてのサブフォルダーを検索するためのワイルドカードがありませんか?

私はインターネットからスクリプトを集めて、1 つの親フォルダの下にあるすべてのフォルダを検索し、特定のファイルを見つけて新しい場所にコピーするスクリプトを作成しています。(ディレクトリには、空と使用中のフォルダが無数に存在し、手動で検索せずにいくつかのファイルを見つけようとしています)

これまでのところ、スクリプトは動作しますが、名前付きファイル (Names.txt ドキュメントから) が親フォルダー (...\source) の直下にある場合のみです。親フォルダー内のいずれかのフォルダー (...\source\folder1\folder2\etc) 内にある場合は、検索されず、何も表示されません。何が足りないのでしょうか?

@echo off
pushd C:\Users\username\Desktop\TestBatches
set /p SourceFolder=Enter the path of source folder and press 'Enter':
cls
for /f "tokens=* delims=" %%a in ('type Names.txt') do xcopy /hrkvy "%SourceFolder%\%%a" ".\destination"
popd
pause

ソース パスを入力するときに、コマンド プロンプトにワイルドカードを入力しますか? または、これを自動的に実行する何かをバッチに入力しますか?

ちょっと迷っています。助けていただきありがとうございます!

答え1

ここでは、高度なバッチの概念について簡単に説明します。
次の例では、バッチを使用しています。機能このタスクを達成するために、これは最も効率的な方法ではありませんが、あなたが達成すべきことの種類を示します。できるやります。私はまだとても疲れているので、この解決策はばかげているかもしれませんが(でも効果はあります)

この道を行かなくても、おそらく「dir /s /b ファイルマスク「あなたが探していたのはこれでした。」

@echo off
:: This assumes that this batch is in the same folder as Names.txt and the .\destination folder
:: This batch DOES NOT check things it should like the existence of %SourceFolder% or if .\destination even exists
Set ThisDir=%~DP0
Set DestinationDir=%ThisDir%\destination
Set NamesFile=%ThisDir%\Names.txt
Set /p SourceFolder=Enter the path of source folder and press [Enter]:
for /f "delims=" %%a in ('type %NamesFile%') do call :SearchName "%%a"
pause
goto :EOF

:: ----------------------------------------------------------------
:SearchName
pushd %SourceFolder%
for /f "delims=" %%f in ('dir /s /b %1') do call :FoundFile "%%f"
popd
goto :EOF

:: ----------------------------------------------------------------
:FoundFile
xcopy /hrkvy "%1" "%DestinationDir%"
goto :EOF

最初のforループは関数を呼び出すだけです:検索名テキスト ファイル内のそれぞれの名前に対して。

:検索名関数は「Set /p」で指定されたディレクトリに切り替え、「dir /s /b NAME_PASSED_FROM_TEXT_FILE」を実行します。取得した行(見つかったファイル)を:見つかったファイル関数。

:見つかったファイル関数は渡されたファイルをコピーします。

関連情報