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 |
|||
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 Agradeço ao Chrome o facto de os meus posts nao terem acentos |
|||
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: 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! |
|||
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" 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 Agradeço ao Chrome o facto de os meus posts nao terem acentos |
|||
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! 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"... Quando tiveres dificuldade em certos comando, faz "comando /?" que aparece todos os argumentos e exemplos desses mesmo comando... |
|||
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 cumps |
|||
« Mais Antigo | Mais Recente »
|
Utilizadores a ver este tópico: 3 Visitante(s)