Почему в выводе отсутствует буква D из параметра /D команды FOR?

Я создаю пакетный файл для удаления всех файлов и папок, кроме папки TEMP. Я заметил, что буква D параметра /D отсутствует в выходных данных. Скрипт вроде работает нормально, но интересно, почему его нет.

@echo on
@Y:
REM Following dangerous command commented out for safety - magoo
REM for %%f in (*) do del "%%f"
for /D %%d in (*) do (
    if /I not "%%d" == "TEMP" echo "%%d"
)
pause

Выход:

Y:\>for %f in (*) do del "%f"

Y:\>for / %d in (*) do (if /I not "%d" == "TEMP" echo "%d" )

Y:\>(if /I not "TEMP" == "TEMP" echo "TEMP" )

Y:\>(if /I not "test" == "TEMP" echo "test" )
"test"

Y:\>(if /I not "test 2" == "TEMP" echo "test 2" )
"test 2"

Y:\>pause

Я повторяю только для проверки. Я заменю его, наконец, на rd /S /Q.


person user3315073    schedule 17.08.2019    source источник
comment
Бьет меня - но моя система делает то же самое.   -  person Magoo    schedule 17.08.2019
comment
Опасно ли это, потому что это может удалить весь диск Y? Как мне его изменить?   -  person user3315073    schedule 17.08.2019
comment
Абсолютно! Предположим, у вас нет диска Y: — буква диска останется неизменной, поэтому вы запустите эту команду из текущего каталога на текущем диске. Как разоружить? много способов. Полное удаление команды. Измените «del» на echo, убедитесь, что текущий диск действительно Y:   -  person Magoo    schedule 17.08.2019
comment
Переход на диск Y: не означает переход в его корневой каталог, фактически для каждого диска существует текущий каталог; вы можете сделать cd/D "Y:\" || exit /B 1, чтобы обязательно перейти в корень Y:, а также выйти в случае ошибка (например, когда Y: даже не существует); в качестве альтернативы используйте pushd/popd...   -  person aschipfl    schedule 17.08.2019
comment
Спасибо. Заменено Y: на cd/D "Y:\" || exit /B и добавлена ​​проверка существования папки TEMP.   -  person user3315073    schedule 17.08.2019
comment
Пока он работает, должен ли я игнорировать тот факт, что буква D не появляется?   -  person user3315073    schedule 17.08.2019
comment
Тот факт, что буква D не отображается, кажется известной ошибкой в ​​​​пакетном интерпретаторе Windows (однако я не готов искать в Google квалифицированный ресурс). Просто игнорируйте его и запускайте свои скрипты, используя @echo OFF  -  person JosefZ    schedule 17.08.2019
comment
Интересный (но безобидный?) баг. Если вы объедините /D с /R, то будет показана только одна косая черта без буквы. Все формы без /D отображаются правильно. @JosefZ - известная ошибка? - У вас есть ссылки? Мне было бы любопытно посмотреть, что было сказано.   -  person dbenham    schedule 18.08.2019
comment
@dbenham Я встречал такое поведение по крайней мере ›4 года назад в пакетный файл для флага цикла/D не отображается в командной строке … Обратите внимание, что мой все еще ищет объяснения там (все еще в силе:). В те дни моей ОС была Windows XP, и я не наблюдал никаких жалоб на FOR /D функциональность в .bat/.cmd с тех пор, как…   -  person JosefZ    schedule 18.08.2019