Windows 递归触摸命令

Windows 递归触摸命令

在 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 工具,从mvdu,到 Korn 和 C shell,再到perlawk。它既有 x86-64 和 IA64 版本,也有 x86-32 版本。这些程序在 Windows 的本机正确 POSIX 环境中运行,而不是使用仿真器 DLL(例如cygwin1.dll)在 Win32 上分层。是的,该工具包有touchfind,以及大约 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

由于它们很容易获得,我建议利用工具。它们包括findtouch命令,这将使这变得非常容易。

切换到您想要修改的最顶层目录后:

查找 . -type f -exec touch {} +

答案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

相关内容