Script CMD - copie arquivos com nome final _0001.png

Script CMD - copie arquivos com nome final _0001.png

Preciso de ajuda para escrever um script em cmd

Estou em uma pasta que contém subpastas, você tem que pesquisar essas subpastas (não se aprofundar) e copiar os arquivos cujo nome termina com "_0001.png" para a pasta !! _TEMP (esta pasta está no local onde o programa é iniciado)

Pode me ajudar?

Isso não funciona:

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

Responder1

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

Responder2

CMD não é meu forte, então vou oferecer minha solução 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
    }
}

você só precisa adicionar seus caminhos

Espero que ajude!

Responder3

Isso deve funcionar para você:

@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%\" 
    )
)

Para tornar as coisas mais limpas e fáceis de alterar, definimos duas variáveis ​​- uma para sua pasta raiz ( dir) e outra para a !!_Temppasta ( tem) dentro de sua raiz; isso também pressupõe, com base na sua pergunta, que você está executando o arquivo .bat da pasta raiz - se esse não for o caso, podemos editar o caminho no primeiro loop for.

O primeiro loop for /danalisa apenas as pastas de nível superior em seu diretório atual e, para cada iteração do loop, essas pastas de nível superior são definidas como parâmetro %%A. O próximo loop analisa apenas os arquivos que correspondem aos critérios que definimos - que é qualquer coisa %%Aque termina em _0001.png- e define cada um deles como parâmetro %%B. O comando neste loop final é if not exist "%tem%\%%~nxB" copy /y "%%B" "%tem%\"- incluímos o if not existpara que ele não seja executado em arquivos que já foram copiados para !!_Temp. Com base na sua pergunta, não tenho certeza se você já encontrou vários arquivos em várias subpastas com exatamente o mesmo nome, mas se esse for um caso potencial, podemos solucionar isso.

Responder4

Esta linha for loop deve funcionar. Ele tem as mesmas variáveis ​​que você está usando.

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

informação relacionada