Команда where
также относится к системным переменным среды PATH
и PATHEXT
при поиске файлов. Чтобы ограничить поиск текущим каталогом, игнорируя при этом PATH
, вам необходимо добавить префикс .:
, например:
for /F "delims= eol=|" %%F in ('where ".:%exten%"') do (
ECHO del "%%F"
)
Тем не менее, это все равно относится к PATHEXT
, так что это также будет соответствовать чему-то вроде somefile.dfs.exe
- не уверен, если вы этого хотите ...
В любом случае, лучше использовать прямой цикл for
:
for %%F in ("%exten%") do (
ECHO del "%%~F"
)
Или вместо этого вы используете команду dir
:
for /F "delims= eol=|" %%F in ('dir /B /A:-D "%exten%"') do (
ECHO del "%%F"
)
Но учтите, что where
обрабатывает символы подстановки не совсем так, как for
и dir
(которые являются cmd
-нтернальными командами), поскольку последние также учитывают короткие 8.3 имен файлов .
Есть следующие способы избежать этого:
с использованием findstr
для фильтрации выходных данных или dir /B
:
set "FILTER=\.dfs"
for /F "delims= eol=|" %%F in ('dir /B /A:-D "%exten%" ^| findstr /I /E /C:"%FILTER%"') do (
ECHO del "%%F"
)
В зависимости от критериев поиска может потребоваться добавить параметр /R
в findstr
.
с использованием where
и временным удалением PATHEXT
:
set "PE=%PATHEXT%" & set "PATHEXT="
for /F "delims= eol=|" %%F in ('where ".:%exten%"') do (
ECHO del "%%F"
)
set "PATHEXT=%PE%"
Обратите внимание, что изменение PATHEXT
влияет только на этот экземпляр cmd
и потенциальные дочерние экземпляры.
После проверки вывода удалите верхний регистр ECHO
, чтобы фактически удалить файлы.