Скрипт CMD - копирование файлов с именем end _0001.png

Скрипт CMD - копирование файлов с именем end _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%\" 
    )
)

Чтобы сделать все более понятным и простым в изменении, мы устанавливаем две переменные — одну для вашей корневой папки ( dir) и одну для !!_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

Эта одна строка цикла for должна работать. Она имеет те же переменные, что и те, которые вы используете.

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

Связанный контент