Это одно из тех требований, которые усложняются каждый раз, когда я нахожу взлом оболочки Windows/cmd, который требует «обходного решения». По сути ... мне нужно перебрать определенный список папок в цикле FOR оболочки DOS. Вот цикл, который я придумал:
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]
Основная потребность заключается в переборе скрытых каталогов в исходной папке (здесь sandbox\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 по метке: ‹2> и тайна по метке: ‹1>. Думаю, я должен объяснить переключатели DIR.
- /b ....... Чистый формат, только имена файлов/папок.
- /adh ..... И скрытые, и каталоги, пробовали это исчерпывающе - не сработало.
/aHD - /ad ...... Элементы с атрибутом Directory (папки).
- /ah ...... Скрытые файлы/папки (на первый взгляд).
Я обозначил вывод, и вот что у меня получилось.
- «Файл не найден»... .. .. .. .. .. .. Понятия не имею. Я нахожу, что «Файл не найден». ‹1> — артефакт переключателя /ah. Когда я просто говорю:
IN (dir /b /adh "w:\sandbox\tmp\"
) - C:\WINDOWS\system32**cmd.exe** .. .. Ложный итератор (%%f); эта ошибка появляется только с версией команды FOR /F. Я хочу найти скрытые каталоги, а список наборов файлов не возвращает скрытые файлы (черт возьми). Итак, до сих пор я застрял с usebackq версией FOR /F.
- Скрытые папки... .. .. .. .. .. .. Эти папки являются ожидаемымивыходными данными_.
- Папки каталогов. .. .. .. .. .. .. Эти файлы являются ложными результатами и не нужны.
Предполагаемый результат из версии строки CMD (или из примера сценария DOS) — это всего лишь ‹3> элемента.
W:..> for /F "usebackq " %f
IN (`dir /b /adh "w:\sandbox\tmp\"`) DO echo ^ folder = %f
folder = hidden-folder-01 <3>
folder = hidden-folder-02 <3>
К сожалению, я также «могу» получить любой файл в целевой папке. Я думаю, что это снова связано со СКРЫТЫМ переключателем (/ah).
Как я могу перечислить только скрытые папки (не файлы) в заданном каталоге; и перебирать список, как команда FOR?
Заранее спасибо / Уилл