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
%%B
if 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\"