为什么带选项 /D -10 的 Windows FORFILES 找不到最近 10 天内最后修改的文件?

发布于 2025-01-09 23:45:58 字数 357 浏览 0 评论 0原文

以下命令行列出了当前目录和所有子文件夹中的每个 .JS 文件,而不仅仅是我预期的过去 10 天内最后修改的文件。

FORFILES /S /D -10 /M *.js /C "cmd /c echo @path"

而此命令仅列出 2022 年 2 月 20 日或之后修改的 .JS 文件。

FORFILES /S /D 2/20/2022 /M *.js /C "cmd /c echo @path"

任何想法为什么使用选项 /D -10 不会产生预期的输出?

The following command line lists every .JS file in the current directory and all subfolders, not just the files last modified in the previous 10 days as expected by me.

FORFILES /S /D -10 /M *.js /C "cmd /c echo @path"

Whereas this command lists only the .JS files modified on or after 2/20/2022.

FORFILES /S /D 2/20/2022 /M *.js /C "cmd /c echo @path"

Any ideas why using the option /D -10 doesn't result in the expected output?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

往事随风而去 2025-01-16 23:45:59

在命令提示符窗口中执行 forfiles /? 以在 Windows 上显示使用帮助结果,语言为 美国英语,但区域/国家/格式为德语 ( Austria) 为用户帐户配置,对于输出中的选项 /D

选择上次修改日期大于或等于 (+) 或小于或等于 (-) 的文件,指定日期使用“dd.MM.yyyy”格式;或选择上次修改日期大于或等于 (+) 当前日期加“dd”天,或小于或等于 (-) 当前日期减去“dd”天的文件。有效的“dd”天数可以是 0 - 32768 范围内的任意数字。如果未指定,则采用“+”作为默认符号。

日期格式取决于区域。

dd.MM.yyyy 表示:

  1. 两位数的月份中的某天,即 0131< /代码>。
  2. 点是月份中的日期和月份之间的分隔符。
  3. 两位数月份,即 0112
  4. 点是月份和年份之间的分隔符。
  5. 带有四位数字的世纪年份,例如 2022

国际日期格式 yyyy-MM-dd 的日期规范会在我的电脑上显示错误消息:

错误:指定的日期无效。
输入“FORFILES /?”供使用。

一些更好理解的示例:

forfiles /D 13.08.2021
forfiles /D +13.08.2021

这将输出最后修改日期较新(大于)或等于的所有文件系统条目(文件和目录名称) > 2021 年 8 月 13 日th

forfiles /D -13.08.2021

这将输出上次修改日期(小于)或等于八月2021 年 13 日。

forfiles /D -10

这将输出上次修改日期(小于)或等于的所有文件系统条目(文件和目录名称) 2022 年 2 月 16 日,当前日期为 2022 年 2 月 26 日2022 年 2 月 26 日)。

forfiles /D 10
forfiles /D +10

这将输出最后修改日期更新(大于)或等于 2022 年 3 月 8 日的所有文件系统条目(文件和目录名称)当前日期为 2022 年 2 月 26 日 (26.02.2022)。如果当前日期正确,这样的日期规范在大多数情况下没有多大意义,因此具有未来日期的文件/文件夹很可能根本不存在。因此,这样的日期规范通常会导致错误消息:

错误:未找到符合指定搜索条件的文件。

更多提示:

  1. 文件/文件夹名称始终以 " 形式输出,这对于在批处理文件中使用非常重要:

    <前><代码>@echo 关闭
    echo 以下文件已超过 9 天:
    回声/
    for /F "delims=" %%I in ('%SystemRoot%\System32\forfiles.exe /D -10 2^>nul') 如果不存在则执行 "%%~I\" echo %%I

  2. 即使使用选项 <,文件/文件夹名称也不会随路径一起输出代码>/S。
    因此,使用 forfiles 捕获输出code>for /F 使用 cmd.exe 进一步处理文件/文件夹,而不是使用 FORFILES 选项 /C使用选项 /S 在当前目录的子目录中分别搜索使用 FORFILES 选项 /P 指定的目录是没有意义的。 p>

  3. 在没有选项/D的情况下使用FORFILES毫无意义,因为在这种情况下,使用内部命令用于Windows 命令处理器 <一href="https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd" rel="nofollow noreferrer">cmd。

  4. 默认情况下,

    forfiles.exe 在 Windows XP 和较旧的 Windows 客户端版本上不存在。可以将Windows Server 2003的Windows system32目录中的forfiles.exe复制到Windows XP PC的Windows system32目录中。 Windows Server 2003 使用与 Windows XP 相同的内核。
    顺便说一句:Windows Server 2003的Windows system32目录中的choice.exerobocopy.exe也可以复制到Windows XP的Windows system32目录中,因为默认情况下不存在Windows XP 也是如此。

PS:目录对于 NTFS、FAT12、FAT16、FAT32、exFAT 等文件系统来说是具有属性 d 的文件。

The execution of forfiles /? in a command prompt window to show the usage help results on Windows with language English US, but with region/country/format German (Austria) configured for the user account, for option /D in the output:

Selects files with a last modified date greater than or equal to (+), or less than or equal to (-), the specified date using the "dd.MM.yyyy" format; or selects files with a last modified date greater than or equal to (+) the current date plus "dd" days, or less than or equal to (-) the current date minus "dd" days. A valid "dd" number of days can be any number in the range of 0 - 32768. "+" is taken as default sign if not specified.

The date format is region dependent.

dd.MM.yyyy means:

  1. Day in month with two digits, i.e. 01 to 31.
  2. A dot is the separator between day in month and month.
  3. Month with two digits, i.e. 01 to 12.
  4. A dot is the separator between month and year.
  5. Year with century with four digits like 2022.

The specification of a date in international date format yyyy-MM-dd results on my PC in the error message:

ERROR: Invalid date specified.
Type "FORFILES /?" for usage.

Some examples for a better understanding:

forfiles /D 13.08.2021
forfiles /D +13.08.2021

This outputs all file system entries (file and directory names) with last modification date newer (greater than) or equal August 13th, 2021.

forfiles /D -13.08.2021

This outputs all file system entries (file and directory names) with last modification date older (less than) or equal August 13th, 2021.

forfiles /D -10

This outputs all file system entries (file and directory names) with last modification date older (less than) or equal February 16th, 2022 on current date being February 26th, 2022 (26.02.2022).

forfiles /D 10
forfiles /D +10

This outputs all file system entries (file and directory names) with last modification date newer (greater than) or equal March 08th, 2022 on current date being February 26th, 2022 (26.02.2022). Such a date specification does not make much sense in most cases if the current date is correct and so files/folders with a future date do most likely not exist at all. So such a date specification results usually in the error message:

ERROR: No files found with the specified search criteria.

Some more hints:

  1. The file/folder names are always output enclosed in " which is important to know on using for example in a batch file:

    @echo off
    echo The following files are older than nine days:
    echo/
    for /F "delims=" %%I in ('%SystemRoot%\System32\forfiles.exe /D -10 2^>nul') do if not exist "%%~I\" echo     %%I
    
  2. The file/folder names are never output with path even on using option /S.
    So capturing the output of forfiles using for /F for further processing the files/folders more efficient with cmd.exe instead of using the FORFILES option /C makes no sense on using option /S to search also in subdirectories of the current directory respectively the directory specified with FORFILES option /P.

  3. The usage of FORFILES without option /D makes never sense as in this case it is always more efficient and definitely better to use the internal command for of the Windows Command Processor cmd.

  4. forfiles.exe does by default not exist on Windows XP and older Windows client versions. forfiles.exe in Windows system32 directory of Windows Server 2003 can be copied to the Windows system32 directory of a PC with Windows XP. Windows Server 2003 uses the same kernel as Windows XP.
    By the way: choice.exe and robocopy.exe in Windows system32 directory of Windows Server 2003 can be also copied to Windows system32 directory of Windows XP as not existing by default on Windows XP too.

PS: A directory is for file systems like NTFS, FAT12, FAT16, FAT32, exFAT a file with the attribute d.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文