@echo off
setlocal disableDelayedExpansion
set "src=sourcePath"
set "dst=destinationPath"
set "search=1080p"
for /r "%src%" %%F in (*%search%*) do (
set "full=%%~fF"
set "name=%%~nxF"
setlocal enableDelayedExpansion
copy "!full!" "%dst%\!name:%search%=!"
endlocal
)
REM call your batch script here to process the copied files
同じファイル名が複数のソースフォルダに存在する場合、問題が発生する可能性があります。しかし、それはあなたが述べた要件に関する一般的な問題です。
説明:
%%~fF
%%Fに含まれるファイルへのフルパスを示します
$$~nxF
%%Fに含まれるファイルの名前と拡張子のみを指定します
タイプHELP FOR
またはFOR /?
FOR変数展開に使用可能な修飾子の詳細については。
!name:%search%=!
遅延展開を使用して名前の内容を検索し、検索値を何も置き換えません。この例では、%search%=1080pです。検索では大文字と小文字が区別されないことに注意してください。
ステートメントが解析されるときにパーセントを使用する通常の展開が発生するため、ループ内で検索と置換を行うときに遅延展開を使用する必要があります。ただし、括弧の内容を含むFOR構文全体は、1つの論理ステートメントとして解析されます。したがって、通常の展開では、ループが実行される前にnameの値が与えられます。それは機能しません:-)遅延拡張は、行が実行されるたびに現在の値を示します。
検索と置換、および拡張の遅延に関する詳細については、HELP SET
またはを入力してください。SET /?
はファイル名の有効な文字であるため、遅延展開のオンとオフを切り替える必要があり!
ます。%% F展開では、値が含まれていると値が破損します!
。