Назад | Перейти на главную страницу

Удалить только файлы ASP

Я пытаюсь написать файл пакетного сценария Windows, который удаляет просто .asp файлы.

Если я сделаю:

del *.asp /s

Это имеет побочный эффект в виде удаления любых файлов с расширением .aspx. Это плохо, потому что я хочу сохранить файлы с расширением aspx.

Есть ли какое-нибудь решение этой проблемы, не требующее установки специального приложения?

Кажется, это помогает в Vista:

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

Чтобы получить больше информации

help for

Есть все виды модификаторов переменных:

Кроме того, улучшена подстановка ссылок на переменные FOR. Теперь вы можете использовать следующий необязательный синтаксис:

%~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

Я подозреваю, что, поскольку del - винтажная команда DOS, она не понимает расширения длиной более 3 символов.

Я вижу несколько решений, только одно из которых вам понравится и ни одно из них не соответствует вашим точным требованиям:

  • запустить вручную и добавить переключатель / p для запроса и пропуска файлов aspx
  • установить Powershell (при условии, что вы используете XP или новее), у которого должен быть способ более детального перебора файлов. Я не гуру PowerShell, но это может быть лучшим выбором, потому что это как минимум компонент Windows, а не пользовательское приложение.
  • установить GNU Findutils и coreutils и удалите файлы так же, как и в unix: «найти имя_директории -name '* .asp' | xargs rm». Плюс: это будет работать. Оборотная сторона: это определенно индивидуально
  • напишите что-нибудь на Perl, C или Java, если они уже установлены на коробке, чтобы делать то же самое, что и в PowerShell

Powershell сделает это. Пока dir -r *.asp будет соответствовать *.aspx, вы можете легко уточнить вывод:

dir . -r -inc *.asp

С помощью -include для соответствия подстановочным знакам в PSH, а не -filter (обычно быстрее), что соответствует Win32 API (с теми же результатами, что и cmd.exe).

Предположительно вы хотите удалить только файлы, поэтому для тестирования:

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

Использование -whatif просто перечислить, что произойдет. Использовать -confirm чтобы предложить настроить файл удаляет. Для использования в сценарии, избегая псевдонимов, но перечисляя, что делается:

Get-ChildItem -path . -recurse -include *.asp | 
  Where-Object {-not $_.PSIsContainer} |
  Remove-Item -Verbose