2 つのファイルがあり、1 つには特定のキーワードが含まれ、もう 1 つにはパスのリストが含まれています。最初のファイル リストからファイル パスのリストにキーワードを検索し、見つかった場合は、指定されたファイル パスから特定のターゲット フォルダーにファイルをコピーします。
最初のファイルの内容
Keyword1
Keyword2
Keyword3
Keyword4
2番目のファイルの内容
\\server\path...\Keyword1.txt
\\server\path...\Keyword1_0_1.txt
\\server\path...\Keyword2_0_1.txt
\\server\path...\Keyword2_1_9.txt
\\server\path...\Keyword3_1_0_1.txt
この目的のために Windows バッチ スクリプトを作成する必要があります。
============================================================
申し訳ありませんが、@pimp-juice-it スクリーンショットを貼り付ける方法がわかりません。そのため、以下の出力をコピーして貼り付けます。
d:\Temp_Script\Script>FOR /R "D:\Temp_Script\Source\33.txt" %G IN (55*) DO ECHO "55" d:\Temp_Script\Script>CALL :FileExist "55" "D:\Temp_Script\Source\44.txt" d:\Temp_Script\Script>FOR /R "D:\Temp_Script\Source\44.txt" %G IN (55*) DO ECHO "55" d:\Temp_Script\Script>CALL :FileExist "55" "D:\Temp_Script\Source\55.txt" d:\Temp_Script\Script>FOR /R "D:\Temp_Script\Source\55.txt" %G IN (55*) DO ECHO "55" d:\Temp_Script\Script>CALL :FileExist "55" "D:\Temp_Script\Source\55 - コピー(2).txt" d:\Temp_Script\Script>FOR /R "D:\Temp_Script\Source\55 - コピー (2).txt" %G IN (55*) DO ECHO "55" d:\Temp_Script\Script>CALL :FileExist "55" "D:\Temp_Script\Source\55 - コピー.txt"
ご覧のとおり、キーワード「55」は UNC に存在しますが、条件は FOR ループ内で True と検証されず、次の UNC に直接進みます。以下はコードです -
:FileExist FOR /R "%~2" %%G IN (%~1*) DO ECHO "%~1"
答え1
「キーワード」リストを1回ループし、反復されたキーワード値と囲まれたワイルドカード文字を検索文字列として使用することができます。つまり *<Keyword>*
ファイル リストから各 UNC パス値のディレクトリ ツリーを調べ、検索文字列「キーワード」に一致するものに対してのみコピー操作を実行できます。
本質的には…
バッチスクリプト
@ECHO ON
SET "strList=\\server\Folder\Path\SearchStrings.txt"
SET "pathList=\\server\Folder\Path\UNCPaths.txt"
SET "targetPath=\\server\target\folder\path"
FOR /F "USEBACKQ TOKENS=*" %%S IN ("%strList%") DO CALL :Paths "%%~S"
PAUSE
EXIT
:Paths
FOR /F "USEBACKQ TOKENS=*" %%P IN ("%pathList%") DO CALL :FileExist "%~1" "%%~P"
GOTO :EOF
:FileExist
FOR /R "%~2" %%C IN (*%~1*) DO XCOPY /F /Y "%%~C" "%targetPath%\"
GOTO :EOF
その他のリソース
-
CALL コマンドは、指定されたラベルと指定されたパラメータの後のステートメントに制御を渡します。サブルーチンを終了するには、
GOTO:eof
これを指定して現在のサブルーチンの最後に制御を移します。 -
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters] Walks the directory tree rooted at [drive:]path, executing the FOR statement in each directory of the tree. If no directory specification is specified after /R then the current directory is assumed. If set is just a single period (.) character then it will just enumerate the directory tree.