Windows バッチ スクリプトを使用して、ファイル リストからファイル名が一致するネットワーク ファイルをコピーします。

Windows バッチ スクリプトを使用して、ファイル リストからファイル名が一致するネットワーク ファイルをコピーします。

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 パス値のディレクトリ ツリーを調べ、検索文字列「キーワード」に一致するものに対してのみコピー操作を実行できます。

本質的には…

  • 最初/fの場合ループは文字列ファイルリストの各行を1行ずつ読み取り、各行の値は反復値となり、最初の引数として渡されます。 電話指示。
  • 二番目/fの場合ループはUNCパスファイルリストの各行を1行ずつ読み取り、それを最初の引数値に渡します。/fの場合ループは2つの引数を持ち、 電話指示。
  • 最後/rの場合ループは、渡された個別の引数として反復文字列値を使用して反復 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

その他のリソース

  • /Fの場合

  • 電話

    CALL コマンドは、指定されたラベルと指定されたパラメータの後のステートメントに制御を渡します。サブルーチンを終了するには、GOTO:eofこれを指定して現在のサブルーチンの最後に制御を移します。

  • /Rの場合

    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.
    

関連情報