gpt4 book ai didi

windows - `forfiles`在什么时候枚举了一个目录(树)?

转载 作者:行者123 更新时间:2023-12-04 13:48:05 25 4
gpt4 key购买 nike

forfiles 命令旨在枚举目录并对每个项目应用 (a) 某些命令。使用 /S 可以对完整的目录树完成相同的操作。

当枚举目录(树)的内容被 forfiles 命令主体中的命令更改时会发生什么?

假设我们的目录 D:\data 包含以下内容:

file1.txt
file2.txt
file3.txt

在上述目录中执行 forfiles/P "D:\data"/M "*.txt"/C "cmd/C echo @file" 的输出将明显反射(reflect)上述列表.

但是,当正文中的命令修改目录内容时,forfiles 的输出是什么?例如,列表中的一个文件在实际迭代之前被删除了,比方说 file3.txt?或者,如果在循环完成之前创建了一个新文件,如 file4.txt

forfiles/S 在这种情况下如何表现?假设有几个子目录sub1sub2sub3,每个子目录都包含上面的文件列表; forfiles/S 目前正在遍历 sub2sub1 已经被处理,但是 sub3 还没有; sub1sub3 的内容在此时发生了变化(如前所述,当前遍历 sub2 时);那么会列举什么呢?我想,sub1 的内容变化不会被识别,但是 sub3 呢?

我主要对自 Windows Vista 以来 forfiles 的行为感兴趣。

注意:
我已经发布了a very similar question关于 for 命令。但是,由于 forfiles 不是内置命令并且具有完全不同的语法,我决定发布一个单独的问题而不是扩展另一个问题的范围。

最佳答案

forfiles 将无法继续枚举重命名的文件夹,并出现 错误:系统找不到指定的文件。 一旦您尝试使用解析的 @-variable到一个不存在的文件。删除的文件不会有错误,如果它的名称遵循当前使用的枚举顺序的当前处理的文件,它将看到一个新添加的文件(我已经使用默认字母排序按升序对其进行了测试)。因此,显然它不会在执行命令之前构建完整的文件列表,而是在自定义命令完成后逐个枚举它们。

根据您需要对 forfiles 执行的操作,可靠的解决方案是解析 dir/s/brobocopy 的输出> 在仅列表模式下。因此,您可以确保在任何更改之前生成列表。

  • for/f "delims="%%a in ('dir "d:\data\*.txt"/s/b') do ......
    适用于简单枚举

  • for/f "tokens=*"%%a in ('robocopy/L/njh/njs/ndl ......') do ...
    适用于限制日期跨度等更复杂的场景,在非直接情况下可能需要使用额外的解析和 /v

关于windows - `forfiles`在什么时候枚举了一个目录(树)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32080023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com