Есть ли простой способ в пакетных файлах циклически перебирать файлы, включая подкаталоги, например, ниже, кроме без следующих символических ссылок ?
FOR /R %%F IN (*) DO (...)
Я не видел такого флага в for
help ...
В контексте я пишу командный файл, который перебирает файлы и создает символические ссылки. Он должен проходить через подкаталоги, однако, когда есть символические ссылки, нацеленные на каталоги, он не должен проходить через них. В моей текущей реализации цикла FOR /R
проблема заключается в том, что он обрабатывает такие символические ссылки как подкаталоги и запускает сценарий в содержимом их цели. Мне все равно, исключает ли решение символические ссылки на простые файлы (в отличие от dirs).
Спасибо за вашу помощь
РЕДАКТИРОВАТЬ для уточнения:
Например, при условии, что эта структура каталогов:
dir
|-- A.txt
|-- subDir
| |-- B.txt
|-- linkDir = symlink to targetDir
|-- Z.txt = symlink to targetDir/C.txt
targetDir
|-- C.txt
Когда я запускаю цикл FOR /R
на dir
, он обрабатывает A.txt
и B.txt
, как ожидалось, но также C.txt
, которыйЯ не хочуЭто связано с тем, что инструкция FOR /R
следует символическим ссылкам при создании списка файлов для повторения, поэтому она действует так, как если бы linkDir
был обычным подкаталогом, который содержит C.txt
.
Относительно Z.txt
, не имеет значения, прочитал ли цикл это. Реализация FOR /R
фактически обрабатывает его, но я настроил фильтр для пропуска итерации, когда %%F
является символической ссылкой.
Проблема в том, что я не знаю, как сказать FOR
не включать C.txt
в списке, ни когда %%F
равно targetDir\C.txt
, как узнать, что этот файл находится в списке, потому что он следовал по символической ссылке в пути dir\subDir\C.txt
.