Script em lote para excluir arquivos

96

Eu tenho um script em lote da seguinte maneira.

D:
del "D:\TEST\TEST1\Archive\*.TSV" 
del "D:\TEST\TEST1\Archive\*.TXT"
del "D:\TEST\TEST2\Archive\*.TSV" 
del "D:\TEST\TEST2\Archive\*.TXT"
del "D:\TEST\TEST 100%\Archive\*.TSV" 
del "D:\TEST\TEST 100%\Archive\*.TXT"

O código acima exclui todos os arquivos ".txt" e ".tsv" de todas as pastas, exceto da pasta TEST 100%. Por excluir os arquivos, TEST 100%estou recebendo o erro como The Path could not be found. Acho que o símbolo% no nome da pasta cria o problema. Alguém pode me orientar para resolver o problema e excluir os arquivos da pasta TEST 100%?

Satheesh
fonte
Por que você tem uma cotação na primeira linha? Além disso, por que você está se referindo à unidade quando seu arquivo de lote já foi alterado para aquela unidade com a primeira linha? Tentei replicar seu problema e tudo funcionou. Você confirmou que o arquivo existe no teste 100%?
RonaldBarzell

Respostas:

112

Você precisa escapar do% com outro ...

del "D:\TEST\TEST 100%%\Archive*.TXT"
Russ Freeman
fonte
Não posso falar pelo OP, mas no meu sistema não há problema em encontrar um caminho com%, e escapar com %% impede que o sistema o encontre.
RonaldBarzell
@ user1161318 - Eu testei no Windows 7. Sem o escape, em um arquivo em lote, resulta em "O sistema não pode encontrar o caminho especificado". Como eu postei funciona.
Russ Freeman
Ok, no XP obtenho resultados opostos. Ele encontra o caminho correto com%, mas não consegue encontrá-lo com %%.
RonaldBarzell
5
Meu palpite é que você está fazendo isso no prompt de comando e não em um arquivo em lote.
Russ Freeman
2
Você provavelmente está certo. Sempre esqueço que, em um arquivo em lote,% é um prefixo variável e você precisa escapar dele. +1
RonaldBarzell
12

Existem várias maneiras de fazer as coisas em lote, então se escapar com uma porcentagem dupla %%não está funcionando para você, então você pode tentar algo assim:

set olddir=%CD%
cd /d "path of folder"
del "file name/ or *.txt etc..."
cd /d "%olddir%"

Como funciona:

set olddir=%CD%define a variável "olddir"ou qualquer outro nome de variável de sua preferência para o diretório a partir do qual seu arquivo em lote foi iniciado.

cd /d "path of folder"altera o diretório atual que o lote estará olhando. mantenha as citações e mude o caminho da pasta para o caminho que você deseja.

del "file name/ or *.txt etc..."irá apagar o arquivo no diretório atual que seu lote está procurando, apenas não adicione um caminho de diretório antes do nome do arquivo e apenas tenha o nome completo do arquivo ou, para excluir vários arquivos com a mesma extensão com *.txtou qualquer extensão que você precisar.

cd /d "%olddir%"pega a variável salva com seu caminho antigo e volta para o diretório com o qual você iniciou o lote, não é importante se você não quiser que o lote volte para seu caminho de diretório anterior, e como afirmado antes do nome da variável pode ser alterado para o que você desejar, alterando o set olddir=%CD% line.

user1931470
fonte
É melhor fazer isso por meio pushd "folder" && del "filename" & popd.
Nuno André
10

Digamos que você salvou seu software na área de trabalho.
se quiser remover uma pasta inteira como um programa de desinstalação, você pode usar isso.

cd C:\Users\User\Detsktop\
rd /s /q SOFTWARE

isso irá deletar toda a pasta chamada software e todos os seus arquivos e subpastas

Certifique-se de excluir a pasta correta Causa Isso não tem uma opção Sim / Não

user3674709
fonte
4

Considere que os arquivos que você precisa excluir têm uma extensão txte estão localizados no local D:\My Folder, então você pode usar o código abaixo dentro do arquivo bat.

cd "D:\My Folder"
DEL *.txt 
Sarath Avanavu
fonte
-7

no código de lote, o caminho não deve conter nenhum espaço, portanto, altere o nome da pasta de "TEST 100%" para "TEST_100%" e seu novo código será del "D: \ TEST \ TEST_100% \ Archive * .TXT"

espero que isso resolva seu problema

Ravi
fonte
6
Nunca ouvi falar disso. Isso é novo? -Sarcasmo fora. Funciona com espaços como sem, desde que o coloque entre aspas.
Blacktempel