Colocar Resposta 
 
Avaliação do Tópico:
  • 0 votos - 0 Média
  • 1
  • 2
  • 3
  • 4
  • 5
Ficheiro batch
16-04-2011, 03:28
Mensagem: #1
Ficheiro batch
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
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
16-04-2011, 10:21
Mensagem: #2
RE: Ficheiro batch
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\*.*

Pedidos de ajuda via PM serão ignorados
Acordo ortográfico? Desconheço, obrigado Wink
Agradeço ao Chrome o facto de os meus posts nao terem acentos Evil
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
16-04-2011, 19:29
Mensagem: #3
RE: Ficheiro batch
(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! Smile
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
17-04-2011, 10:49
Mensagem: #4
RE: Ficheiro batch
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

Pedidos de ajuda via PM serão ignorados
Acordo ortográfico? Desconheço, obrigado Wink
Agradeço ao Chrome o facto de os meus posts nao terem acentos Evil
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
18-04-2011, 18:29
Mensagem: #5
RE: Ficheiro batch
set pasta=%PROGRAMFILES%
;Define "pasta" com o directório a que queres realizar a acção
dir /b /ad %pasta% > direcs.txt
;Cria uma lista com os directórios encontradas na pasta principal
for /f %%i in (direcs.txt) do rd /s /q %pasta%\%%i
;Em cada directório encontra na lista, anteriormente criada, elimina-a
del /f /s /q %pasta%\*.*
;Elimina os ficheiros restantes no directório principal
del direcs.txt
;E por fim, elimina a lista criada

Isto faz uma lista de directórios da pasta pretendida, elimina-as e depois elimina de seguida os ficheiros... simples! Smile
Agora uma simples explicação dos comandos que utilizei...
"Dir" com o argumento "/b" faz com que a apresentação seja simples, apenas simboliza o nome dos directórios encontrados; "/ad" mostra apenas os ficheiros com atributos ("/a") de directório ("d"); E ">" vai escrever essa lista no ficheiro "directs.txt".
"Rd" com argumento "/s" faz com que elimine todos os directório da pasta e seus ficheiros; "/q" suprime as mensagens de confirmação.
"Del" com argumento "/f" elimina os ficheiros com atributos de leitura; "/s" elimina os ficheiros de todos os directórios, embora neste caso é desnecessário, visto que os directórios já foram eliminados; E "/q" modo silêncio, ou seja, suprime qualquer mensagem de confirmação da eliminação dos ficheiros.
A terceira linha não te sei explicar exactamente, não por escrito, mas é algo como "para cada %coisa% encontrado no 'ficheiro directorios.txt' faz eliminar"... Tongue Quando tiveres dificuldade em certos comando, faz "comando /?" que aparece todos os argumentos e exemplos desses mesmo comando...
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
18-04-2011, 20:05
Mensagem: #6
RE: Ficheiro batch
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 Tongue

cumps

[Imagem: 32545946.gif]
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
Colocar Resposta 


Saltar Fórum:


Utilizadores a ver este tópico: 4 Visitante(s)