Apagar apenas arquivos ASP

2

Estou tentando gravar um arquivo de script em lotes do Windows que exclui apenas arquivos .asp.

Se eu fizer:

del *.asp /s

Isso tem o efeito colateral de excluir quaisquer arquivos com a extensão .aspx. Isso é ruim porque eu quero preservar arquivos com a extensão aspx.

Existe alguma solução para este problema que não exija a instalação de um aplicativo personalizado?

    
por Simon Johnson 20.07.2009 / 10:05

3 respostas

4

Isto parece fazer o truque no Vista:

for %i in (*.asp) do @if not %~xi==.aspx del %i

Para mais informações

help for

Existem todos os tipos de modificadores para variáveis:

In addition, substitution of FOR variable references has been enhanced. You can now use the following optional syntax:

%~I         - expands %I removing any surrounding quotes (")
%~fI        - expands %I to a fully qualified path name
%~dI        - expands %I to a drive letter only
%~pI        - expands %I to a path only
%~nI        - expands %I to a file name only
%~xI        - expands %I to a file extension only
%~sI        - expanded path contains short names only
%~aI        - expands %I to file attributes of file
%~tI        - expands %I to date/time of file
%~zI        - expands %I to size of file
%~$PATH:I   - searches the directories listed in the PATH
               environment variable and expands %I to the
               fully qualified name of the first one found.
               If the environment variable name is not
               defined or the file is not found by the
               search, then this modifier expands to the
               empty string
    
por 20.07.2009 / 11:11
1

Eu suspeito que, como del é um comando DOS-vintage, ele não entende extensões com mais de 3 caracteres.

Existem várias soluções que posso ver, apenas uma das quais você vai gostar e nenhuma delas se adapta às suas necessidades exatas:

  • executar manualmente e adicionar a opção / p para solicitar e pular arquivos aspx
  • instale o powershell (presumindo que você esteja no XP ou mais recente), o que deve tem uma maneira de iterar os arquivos de maneira mais refinada. Eu não sou um guru do powershell, mas isso pode ser a melhor escolha, porque é pelo menos um componente do Windows em vez de um aplicativo personalizado
  • instale o GNU findutils e coreutils e apague os arquivos do jeito que você faria no unix:" find directoryname -name '* .asp' | xargs rm ". De cabeça: vai funcionar. Desvantagem: é definitivamente personalizado
  • escreva algo em Perl ou C ou Java se você já tiver aqueles instalados na caixa para fazer a mesma coisa que faria no powershell
por 20.07.2009 / 10:33
0

O Powershell fará isso. Enquanto dir -r *.asp corresponde a *.aspx , você pode refinar facilmente a saída:

dir . -r -inc *.asp

Usando -include para corresponder aos curingas em PSH, em vez de -filter (normalmente mais rápido), que corresponde à API do Win32 (com os mesmos resultados que cmd.exe ).

Você presumivelmente deseja apenas excluir arquivos, portanto, para testes:

dir . -r -inc *.asp | ?{-not $_.PSIsContainer} | del -whatif

Uso de -whatif apenas para listar o que aconteceria. Use -confirm para solicitar a configuração das exclusões do arquivo. Para uso em um script, evitando aliases, mas listando o que é feito:

Get-ChildItem -path . -recurse -include *.asp | 
  Where-Object {-not $_.PSIsContainer} |
  Remove-Item -Verbose
    
por 20.07.2009 / 11:57