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 !!_Temp
pasta ( 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 /d
analisa 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 %%A
que 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 exist
para 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\"