【发布时间】:2019-10-28 10:06:11
【问题描述】:
除了不遵循符号链接之外,在批处理文件中是否有一种简单的方法来循环包括子目录在内的文件(如下所示)?
FOR /R %%F IN (*) DO (...)
我在for帮助中没有看到这样的标志...
上下文是我正在编写一个循环文件并创建符号链接的批处理文件。它需要通过子目录,但是当有针对目录的符号链接时,它不应该通过它们。对于我当前的FOR /R 循环实现,问题在于它将此类符号链接视为子目录并在其目标内容中运行脚本。我不在乎解决方案是否排除指向普通文件的符号链接(而不是 dirs)。
感谢您的帮助
编辑澄清:
例如,提供这个目录结构:
dir
|-- A.txt
|-- subDir
| |-- B.txt
|-- linkDir = symlink to targetDir
|-- Z.txt = symlink to targetDir/C.txt
targetDir
|-- C.txt
当我在dir 上运行FOR /R 循环时,它会按预期处理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。
【问题讨论】:
-
在文件/目录上尝试
ATTRIB命令。检查/L开关... -
FOR /F "EOL=? DELIMS=" %%F IN ('DIR /B /S /A:-L') DO …您可能还希望查看DIR命令的其他选项,即打开命令提示符窗口并输入dir /?。 -
@Aacini
ATTRIB不只是为了改变属性吗? -
@Compo 这是一个很好的尝试,它不包括指向普通文件的符号链接,但不幸的是
/S标志仍然跟随符号链接...... -
@fbastien,鉴于您只提供了非常有限的关于您要实现的目标的想法,我不可能更具体。正如我之前的评论中提到的,当您也使用其他选项时会发生什么?例如
FOR /F "EOL=? DELIMS=" %%F IN ('DIR /B /S /A:-D-S-L') DO …
标签: windows batch-file