CMD スクリプト - 名前末尾が _0001.png のファイルをコピーします

CMD スクリプト - 名前末尾が _0001.png のファイルをコピーします

cmdでスクリプトを書くのに助けが必要です

サブフォルダがあるフォルダにいる場合は、これらのサブフォルダを検索し(深く探さないでください)、名前が「_0001.png」で終わるファイルをフォルダにコピーする必要があります!! _ TEMP(このフォルダはプログラムが起動する場所にあります)

手伝ってもらえますか?

これは機能しません:

for /R "%folder%" %%G in (*_0001.png) do copy "%%G" "%folder%\!!_TEMP\"

答え1

pushd "%folder%"
for /D %%D in (*) do copy "%%D\*_0001.png" "!!_TEMP"
popd

答え2

CMD は私の得意分野ではないので、Powershell ソリューションを提供します。

$content = Get-ChildItem .\Desktop\localtmp -Depth 1
foreach($file in $content){
    if($file.Name -like "*_0001.png"){
    $path = $file.DirectoryName + "\" + $file.Name
        Copy-Item $path -Destination .\Desktop\anotherlocaltmp
    }
}

パスを追加するだけです

それが役に立てば幸い!

答え3

これはうまくいくはずです:

@echo off

set "dir=C:\Your\Root\Folder"
set "tem=%dir%\!!_Temp"

for /d %%A in (*) do (
    for %%B in (%%A\*_0001.png) do (
        if not exist "%tem%\%%~nxB" copy /y "%%B" "%tem%\" 
    )
)

よりわかりやすく、変更しやすいように、2 つの変数を設定します。1 つはルート フォルダー用 ( dir)、もう 1 つはルート内の!!_Tempフォルダー用 ( tem) です。また、質問に基づいて、.bat ファイルをルート フォルダーから実行していることを前提としています。そうでない場合は、最初の for ループでパスを編集できます。

最初のループには があり、for /d現在のディレクトリの最上位フォルダのみを参照し、ループの各反復で、それらの最上位フォルダがパラメータ として設定されます。次のループは、設定した基準に一致するファイルのみを参照し(で終わり、%%Aにあるすべてのファイル)、それらのそれぞれをパラメータ として設定します。この最後のループのコマンドは です。 を含めて、にすでにコピーされているファイルでは実行されないようにします。ご質問の内容から判断すると、複数のサブフォルダにまったく同じ名前の複数のファイルが存在するかどうかはわかりませんが、その可能性がある場合は回避できます。%%A_0001.png%%Bif not exist "%tem%\%%~nxB" copy /y "%%B" "%tem%\"if not exist!!_Temp

答え4

この 1 行の for ループは機能するはずです。使用している変数と同じ変数があります。

for /f "delims==" %%G in ('dir "%folder%\*_0001.png" /s /b') do copy "%%G" "%folder%\!!_TEMP\"

関連情報