Windows递归触摸命令

jmq*_*jmq 18 windows-7 touch

在 Windows 7 中,如何递归地触摸目录(包括子目录)中的所有文件以更新日期/时间戳?

Windows 7 是否有实现此目的的机制?

Jde*_*eBP 19

有几种可能:

  • 使用 Unixtouch命令的端口,findtouch以 Unix 方式简单地组合和。有几种选择。经常提到的是GNUWin32cygwinunxutils。不太为人所知,但在某些方面更好的是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 Duguaytouch,正如您所见,它有一个--recursive选项。

  • 巧妙地了解 CMD 的奥秘。 如另一个答案中所述,COPY /B myfile+,,将使用鲜为人知的COPY命令的“加号”语法更新文件的上次修改日期戳(顺便说一下,可以在此处找到更多相关信息)。这当然可以与FOR /R递归执行操作相结合,正如此处的另一个答案所暗示的那样。

  • 使用替代的命令解释器,不如 CMD 聪明和直接。 JP Software 的 TCC/LE就是其中之一。它为其命令添加了一个/S选项,这意味着可以使用“加号”语法来消除对包装器的需要。但考虑到 TCC/LE 有一个直接支持选项的内置 TOUCH 命令,这确实让自己的生活变得不必要地困难。COPYCOPY /SFOR/S

  • Powershell 方式:`(ls file).LastWriteTime = DateTime.now` (4认同)
  • +1,`COPY /B file+,,` 是要走的路,不需要额外的...... :-) (2认同)

小智 7

要仅使用现有的 Windows 功能(无需额外安装),请尝试以下方法之一:

forfiles /P C:\Path\To\Root /S /C "cmd /c Copy /B @path+,,"  
Run Code Online (Sandbox Code Playgroud)

(递归地“触摸”从指定路径开始的所有文件)

或者

forfiles /S /C "cmd /c Copy /B @path+,,"   
Run Code Online (Sandbox Code Playgroud)

(递归地“触摸”从当前目录开始的所有文件)

  • -1 这些命令将文件从子文件夹复制到根目录,结果是一团糟。 (3认同)
  • +1 稍微修改一下@TonyG所说的内容: forfiles /S /C "cmd /c Copy /B nul:+,," (2认同)

Joh*_*n T 5

由于它们随时可用,我建议利用unxutils。它们包括findtouch命令,这将使这变得非常容易。

更改到您要修改的最顶层目录后:

找 。-type f -exec touch {} +