Хотя ваш вопрос состоит в том, что вы просто не используете правильный синтаксис в своей команде for
, я отметил и другие замечания, которые я решил, что будет лучше в качестве ответа.
Наиболее очевидный одна из них заключается в том, что вы устанавливаете переменную без причины, а затем вынуждены использовать ее с отложенным расширением.
Чтобы сделать это так, как вы, она должна выглядеть примерно так:
@Echo Off
SetLocal DisableDelayedExpansion
For %%G In (Output\*) Do (
Set "fileName=%%G"
SetLocal EnableDelayedExpansion
If /I Not "!fileName:~-4!"==".pdf" (
Del /F "!fileName!"
)
EndLocal
)
Все эти пакетные файлы должны делать то же самое.
Стандарт для l oop:
@For %%G In (Output\*)Do @If /I Not "%~xG"==".pdf" Del /F "%%G"
Использование варианта
for /f
:
@For /F "Delims=" %%G In ('Dir /B/A-D-S-L "Output" 2^>NUL^|FindStr /VILE ".pdf"')Do @Del /F "Output\%%G"
или через несколько строк, если вам легче читать:
@Echo Off
For /F "Delims=" %%G In (
'Dir /B/A-D-S-L "Output" 2^>NUL^|FindStr /VILE ".pdf"'
) Do (
Del /F "Output\%%G"
)
Пожалуйста, помните, что почти каждая команда windows cli имеет встроенную справку, и подавляющее большинство принимает вариант /?
, например, for /?
, del /?
. Кроме того, вы можете использовать команду help
, например, help dir
, help findstr
.