Я пытаюсь написать файл пакетного сценария 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 символов.
Я вижу несколько решений, только одно из которых вам понравится и ни одно из них не соответствует вашим точным требованиям:
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