- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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
在这种情况下如何表现?假设有几个子目录sub1
、sub2
、sub3
,每个子目录都包含上面的文件列表; forfiles/S
目前正在遍历 sub2
,sub1
已经被处理,但是 sub3
还没有; sub1
和 sub3
的内容在此时发生了变化(如前所述,当前遍历 sub2
时);那么会列举什么呢?我想,sub1
的内容变化不会被识别,但是 sub3
呢?
我主要对自 Windows Vista 以来 forfiles
的行为感兴趣。
注意:
我已经发布了a very similar question关于 for
命令。但是,由于 forfiles
不是内置命令并且具有完全不同的语法,我决定发布一个单独的问题而不是扩展另一个问题的范围。
最佳答案
forfiles
将无法继续枚举重命名的文件夹,并出现 错误:系统找不到指定的文件。
一旦您尝试使用解析的 @-variable到一个不存在的文件。删除的文件不会有错误,如果它的名称遵循当前使用的枚举顺序的当前处理的文件,它将看到一个新添加的文件(我已经使用默认字母排序按升序对其进行了测试)。因此,显然它不会在执行命令之前构建完整的文件列表,而是在自定义命令完成后逐个枚举它们。
根据您需要对 forfiles
执行的操作,可靠的解决方案是解析 dir/s/b
或 robocopy
的输出> 在仅列表模式下。因此,您可以确保在任何更改之前生成列表。
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/
我正在尝试使用以下命令在 Windows 8 命令窗口中使用 FORFILES 遍历文件: CD "%RODIR%" FORFILES /P "./DarkestHour" /C "cmd /c ec
forfiles 命令旨在枚举目录并对每个项目应用 (a) 某些命令。使用 /S 可以对完整的目录树完成相同的操作。 当枚举目录(树)的内容被 forfiles 命令主体中的命令更改时会发生什么? 假
我正在运行一个批处理文件,其中有一个 forfiles 命令 FORFILES -p%spinputarchrootpath% -m*.csv -d-365 -c"CMD /C DEL @FILE"
我正在尝试在 dos 中运行此命令 FORFILES with params /P C:\Builds\ /M *.chm /S /C "cmd /c copy @file C:\My Brand\"
因此,我尝试使用名为 ImageResizer 的程序和命令 forfiles 一次重新缩放一堆图像。 但是由于我必须对命令本身及其内部的参数使用引号,所以这是行不通的: ERROR: Argumen
我想写一个批处理,在 c:\ 中找到所有小于 50 mb 的文档,并将它们复制到一个文件夹中,但忽略系统目录文档。我更喜欢它甚至不在系统目录中搜索。 这是我的批处理,它在正确的目录中查找并复制小于 5
我正在尝试清除一个公共(public)目录,所以当一个项目超过 30 天时,它应该被删除。我使用以下命令设置了一个批处理文件: forfiles /p "C:\PATH\USERS\PATH\" /s
我需要使用 forfiles 命令从 Windows 命令提示符生成一个 xml。 到目前为止我还没有,但是变量包含引号而且我不想要它...... 这是我当前的命令: %FF_CMD% /c "cmd
以下命令适用于一种类型的文件, forfiles -p "C:abc\del" -s -m *.exe -d -70 -c "cmd /c echo @path" 是否可以过滤多个文件扩展名? *.e
我想对目录中的一堆文件运行命令,并将命令的输出发送到每个 .ts 文件的单独 .csv 文件。 我要运行的命令是: ffprobe -print_format csv -show_packet >
我正在尝试运行一个基本的 forfiles 命令,但无论我使用什么掩码,它总是简单地打印目录的全部内容。没有过滤 *.bat 没有“是批处理文件”,只是 C:\中所有文件的简单列表我正在研究 winX
我正在使用批处理文件从 cmd.exe 运行以下命令。 forfiles /p C:\Users\subhamt\Downloads /m embeddedsection.zip /c "cmd /c
我有一个脚本,我想在其中为目录中的每个文件调用一个函数。使用 forfiles,我已经能够像这样列出它们: forfiles /p "%myPath%" /c "cmd /c echo @path N
我需要使用 ffmpeg 加入几个 mp4 和 wav 文件对。 当我运行指定文件名的命令时,它运行良好:.\ffmpeg.exe -i file01.mp4 -i file01.wav -c:v c
forfiles命令建立了几个变量,由前导 @ 指示,它将有关当前迭代项的数据返回到循环体。 所有与迭代项的路径和名称相关的变量都返回 "" 中的值。 .这些是:@file , @fname , @e
我正在尝试做类似于 Get Visual Studio to run a T4 Template on every build 的事情使用 cmd 的 forfiles 转换 VS2008 中的每个模
我目前正在将一个 DOS 批处理脚本转换为一个 shell 脚本,虽然我有 99% 的工作,但有一部分我不知道如何转换。 在批处理文件中,我有一行看起来像 forfiles -p "t:\jeopar
我想在 cmd 文件中使用 FORFILES,以对给定日期之后到“今天”的所有文件执行操作。我可以使用 forfiles/d +07/10/2013/c "cmd/c echo @fname" 之类的
我正在尝试运行以下命令: forfiles /p ..\Schemas /m *.xsd /c "cmd /c ""C:\Program Files (x86)\Microsoft SDKs\Wind
我有一个场景: FORFILES /P "C:\users\DominiqueGerry\Work Files\" /S /M *.doc /C "cmd /c echo @fsize" 给我一个错误
我是一名优秀的程序员,十分优秀!