在 Windows 7 中,如何递归触及目录(包括子目录)中的所有文件以更新日期/时间戳?
Windows 7 是否有一个机制可以实现这一点?
答案1
有几种可能性:
使用 Unix 命令的端口
touch
并以 Unix 方式简单地组合find
和。touch
有几种选择。经常提到的是操作系统,赛格威, 和工具不太为人所知,但在某些方面更好的工具是SFUA 实用工具包,运行于基于 UNIX 的应用程序子系统它随 Windows 7 Ultimate 版本和 Windows Server 2008 R2 一起提供。(对于 Windows XP,可以下载并安装UNIX 版本 3.5 的服务.) 此工具包有大量的命令行 TUI 工具,从mv
和du
,到 Korn 和 C shell,再到perl
和awk
。它既有 x86-64 和 IA64 版本,也有 x86-32 版本。这些程序在 Windows 的本机正确 POSIX 环境中运行,而不是使用仿真器 DLL(例如cygwin1.dll
)在 Win32 上分层。是的,该工具包有touch
和find
,以及大约 300 个其他工具包。
当然,所有这些工具包都有一个众所周知的缺点,即为每个要接触的文件运行一个单独的进程。对于以下替代方案,这不是问题。touch
使用人们编写和发布的众多本机 Win32 命令之一。 其中许多都支持执行递归的选项,而不需要 Unixfind
来包装它们。(毕竟,它们针对的是那些正在寻找touch
命令的用户群,因为它没有大量移植的 Unix 命令。)其中之一是Stéphane Duguay 的touch
正如您所见,它有一个--recursive
选项。巧妙运用 CMD 的神秘奥秘。 正如另一个答案中提到的那样,
COPY /B myfile+,,
将使用命令中鲜为人知的“加号”语法来更新文件的最后修改日期戳COPY
(有关更多信息,请参见这里顺便说一下)。当然,这可以与FOR /R
递归执行操作相结合,正如这里的另一个答案所暗示的那样。使用替换命令解释器,比CMD更不聪明,更直接。 JP Software 的 TCC/LE就是这样的。它增加了一个
/S
选项它的COPY
命令,这意味着可以使用COPY /S
“加号”语法来消除对包装器的需求FOR
。但这实际上仍然给自己带来了不必要的困难,因为 TCC/LE 已经内置 TOUCH 命令直接支持/S
选项。
答案2
如果仅使用现有的 Windows 功能(无需安装额外功能),请尝试以下操作之一:
forfiles /P C:\Path\To\Root /S /C "cmd /c Copy /B @path+,,"
(递归“触摸”从指定路径开始的所有文件)
或者
forfiles /S /C "cmd /c Copy /B @path+,,"
(递归“触摸”从当前目录开始的所有文件)
答案3
答案4
或者,您可以使用 Windows 中已经内置的工具,只要您已经拥有某种“触摸”工具:
for /r %i in (C:\Path\To\Root\*) do @touch "%i"
或者
forfiles /P C:\Path\To\Root /S /C "touch @file"
(注意:如果您从批处理文件执行此操作并想要使用该for
命令,请确保对变量使用双百分号。(例如,%%i
而不是%i
)