Это одно из тех требований, которые кажутся более сложными, каждый раз, когда я нахожу взлом оболочки Windows / cmd, который нуждается в «обходном пути». По сути ... Мне нужно перебрать определенный список папок в цикле DOS Shell FOR. Вот цикл, который я придумал:
echo ^ [start for test]
for /F "usebackq " %%f IN (`dir /b /adh "w:\sandbox\tmp\"`) DO (
echo ^ do with file: %%f
rem <do something>
)
echo ^ [for test done]
Основная задача - перебирать скрытые каталоги в исходной папке (здесь песочница \ tmp).
Результат удивительный и разочаровывающий. Это результат использования этой инструкции FOR в командной строке консоли.
W:..> for /F "usebackq " %f
IN (`dir /b /adh "w:\sandbox\tmp\"`) DO echo ^ folder = %f
File Not Found <1>
folder = C:\WINDOWS\system32\cmd.exe <2>
folder = any <4>
folder = hidden-folder-01 <3>
folder = hidden-folder-02 <3>
folder = morph <4>
folder = practice-northwind <4>
В котором перечислены пять папок. Большой! И один cmd.exe на ярлыке: <<strong> 2 > и загадка на ярлыке: <<strong> 1 >. Я должен объяснить переключатели DIR , я думаю.
- / b ....... Голый формат, только имена файлов / папок.
- / a dh ..... И скрытые, и каталоги, пытались это исчерпывающе - не сработало.
/ a hd
- / a d ...... Элементы с атрибутом Directory (папки).
- / a h ...... Скрытые файлы / папки (вроде бы).
Я пометил вывод, и вот что я уже разработал.
- «Файл не найден» .. .. .. .. .. .. .. .. Понятия не имею. Я обнаружил, что «Файл не найден». <<strong> 1 > - это артефакт переключателя / ah . Когда я просто говорю:
IN (dir /b /adh "w:\sandbox\tmp\"
)
- C: \ WINDOWS \ system32 ** cmd.exe ** .. .. Поддельный итератор ( %% f ); эта ошибка отображается только с версией команды FOR / F . Я хочу найти скрытые каталоги, а список файловых наборов не возвращает скрытые файлы (черт возьми). Итак, пока я застрял с usebackq версией FOR /F.
- Скрытые папки ... .. .. .. .. .. .. Эти папки ожидаемые выходные данные _.
- Папки каталогов. .. .. .. .. .. .. Эти файлы являются ложными результатами и не нужны.