Tudo o que você precisa fazer é fazer várias declarações if
, eu acho. Então, dentro do seu loop, ficaria assim:
IF exist "%%G\*.pdf" (
move /Y "%%G\*.pdf" "%_dest%\"
echo %%G>>"%_dest%\results-log.log
)
IF exist "%%G\*.exe" (
move /Y "%%G\*.exe" "%_dest%\"
echo %%G>>"%_dest%\results-log.log
)
IF exist "%%G\*.avi" (
move /Y "%%G\*.avi" "%_dest%\"
echo %%G>>"%_dest%\results-log.log
)
Se você quiser manter a mensagem dizendo nada para mover, você sempre pode definir alguma variável se ela ficar dentro de uma dessas instruções IF
e verificar se está definida.
Não sei o que é /B
, isso não parece certo para mim. Eu acho que você está certo com /y
.
O G
pode ser qualquer caractere, mas não pode ter mais de um caractere. G
é o que geralmente é usado.
Eu sugeriria pesquisar scripts do powershell para coisas como essa. Na minha opinião, é mais simples e mais simples fazer coisas assim com menos linhas de código. Pode haver um comando para mover todos os arquivos com várias extensões de uma só vez, mas pelo que entendi essa sintaxe geralmente não está disponível para movimentação na maioria das versões do DOS.
EDITAR:
Eu testei isso localmente e parece funcionar para o que você está fazendo. Você precisará ajustá-lo para o seu caso específico.
@ECHO OFF
SETLOCAL EnableExtensions enabledelayedexpansion
set _parent=c:\logs\cache\
set _dest=c:\archive\
set found=0
for /R %_parent% %%G in (.) do (
set found=0
IF exist "%%G\*.pdf" (
move /Y "%%G\*.pdf" "%_dest%\"
set found=1
)
IF exist "%%G\*.exe" (
move /Y "%%G\*.exe" "%_dest%\"
set found=1
)
IF exist "%%G\*.avi" (
move /Y "%%G\*.avi" "%_dest%\"
set found=1
)
IF !found!==1 (
rd /s /q "%%G"
echo %%G>>"%_dest%\results-log.log"
)
)
endlocal
Usar a opção /D
no loop for
anexa o diretório atual no qual você está executando o script para a variável %%G
, o que não é o que você deseja. A maneira que eu escrevi acima basicamente diz que recurse todas as pastas no diretório pai e defina %%G
para esse local (.)
.
Você também tem que adicionar enabledelayedexpansion
para poder usar a variável found
em blocos diferentes, então você precisa chamar !found!
ao invés de %found%
para usá-lo. Apenas uma estranha peculiaridade de scripts em lote.
Se toda essa sintaxe parece realmente estranha para você, você não está sozinho. Você só precisa pesquisar e fazer seus próprios testes para ver o que acontece até conseguir fazer o que quiser. Espero que quando você entrar no powershell você encontre depuração usando o PowerShell ISE e a sintaxe usada seja muito mais simples.