#batch-file #for-loop
#пакетный файл #for-loop
Вопрос:
Я пишу пакетный файл, который перебирает локальные диски на ПК и проверяет наличие файла в корне диска. Если файл существует, я хочу, чтобы ты что-то сделал, а если он не существует, я хочу сделать что-то еще, но оператор If Exists не работает. Вот фрагмент кода:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
for /F "tokens=2 delims==" %%D in ('"wmic logicaldisk where drivetype=3 get name /format:value"') do (
echo %%D
if exist %%Dfile.txt (
echo Processing Drive %%D
Do Something ...
) else (
Do Something Else ...
)
)
goto :EOF
Если я перемещу блок If из цикла For и помечу его как подпрограмму в командном файле и вызову его из цикла For, он будет работать нормально, но я хотел бы понять, почему он не работает внутри цикла For.
Комментарии:
1. Извините, но «не работает» не помогает. Можете ли вы подробнее остановиться на этой части?
Ответ №1:
Если вы измените свою echo %%D
строку, echo ...[%%D]...
вы увидите, почему она терпит неудачу.
Вывод WMIC включает дополнительный возврат каретки в свой вывод, который необходимо удалить
@echo off
setlocal EnableExtensions EnableDelayedExpansion
for /F "tokens=2 delims==" %%a in (
'"wmic logicaldisk where drivetype=3 get name /format:value"'
) do for %%D in (%%a) do (
echo ....[%%D]....
if exist %%Dfile.txt (
echo Processing Drive %%D
) else (
echo Skipping Drive %%D
)
)
goto :EOF
В этом случае дополнительный for
обработает проблему, удалив дополнительный CR.