Infelizmente os meus conhecimentos não são suficientes para programar um ficheiro batch que seja eficiente. Eu programei um, mas é muitíssimo básico e tem muitas linhas; pois é como sei. Se bem que com alguns problemas.
Bem, de qualquer das maneiras se alguém me pudesse ajudar, ficaria grato.
Eu pretendo um ficheiro batch que, em primeiro lugar, verifique se determinada pasta existe em %PROGRAMFILES%, e se sim, então eliminar todos os ficheiros que se encontran na pasta, bem como todas as subpastas e ficheiros nelas contidos, mas nunca eliminar a pasta principal.
Alguém me saberia dar indicações sobre como o conseguir?
Muito obrigado
Se não te preocupares que se queixe quando a directoria não existe, então é simples. Basta usares o seguinte comando:
Código:
del /F /S /Q %PROGRAMFILES%\directoria_a_limpar\*.*
(16-04-2011 10:21)Corvus Escreveu: [ -> ]Se não te preocupares que se queixe quando a directoria não existe, então é simples. Basta usares o seguinte comando:
Código:
del /F /S /Q %PROGRAMFILES%\directoria_a_limpar\*.*
Olá Corvus,
Desde já um muito obrigado pela tua disponibilidade em querer ajudar.
Em primeiro, é necessário colocar aspas nesse comando:
Código:
del /F /S /Q "%PROGRAMFILES%\directoria_a_limpar\*.*"
Caso contrário não funciona.
Acontece que, apesar de eliminar todos os ficheiros da pasta e sub-pastas, não elimina as sub-pastas.
Eu poderia adicionar algo como
Código:
rmdir /Q "%PROGRAMFILES%\directoria_a_limpar\sub_pasta_1/2/etc
que deveria funcionar. Ainda não experimentei. Contudo, o ideal seria eliminar todas as sub-pastas de uma só vez. Sabes como o fazer?
Agradeço mais uma vez a tua ajuda!
Por acaso não tinha testado a ver se o del removia as directorias.
Esta alternativa não é tão "limpa" mas funciona:
Código:
rmdir /s /q "%PROGRAMFILES\dir_a_limpar"
mkdir "%PROGRAMFILES\dir_a_limpar"
Nota que eliminas e tornas a criar a directoria base, mas é a única maneira que estou a ver sem complicar muito o batch e sem saber antecipadamente o conteúdo da directoria
Realmente é mesmo fraquinho o scripting em windows.. se percebi bem, isto em unix seria apenas um:
Código:
rm -r /caminho_da_pasta/*
A alternativa do Corvus parece-me boa, mas contra a parte de remover apenas se a pasta existir.. logo se a pasta não existir acho que não é suposto cria-la.
Em unix bastava por o comando de remover seguido de um && com o comando de criação de pasta a frente. Desta forma a criação de pasta só seria efectuada se a remoção ocorresse. Não sei se em windows existe este operando.
Quanto a solução do avlisrotiv.. é preciso guardar num ficheiro o output do dir para depois o utilizar? Não se pode fazer directamente no for? em unix faria algo do genero
Código:
for line in `ls /caminho_dir/`; do; rm -r $line; done;
Desculpem lá o paralelismo
cumps