在Windows 7中,如何递归触摸目录(包括子目录)中的所有文件以更新日期/时间戳?
Windows 7是否具有完成此任务的机制?
在Windows 7中,如何递归触摸目录(包括子目录)中的所有文件以更新日期/时间戳?
Windows 7是否具有完成此任务的机制?
Answers:
有几种可能性:
使用Unix touch
命令的端口,并简单地以Unix方式组合find
和touch
使用。有几种选择。经常提到的是GNUWin32,cygwin和unxutils。SFUA实用工具包中的工具鲜为人知,但在某些方面却更好,它们在Windows 7 Ultimate Edition和Windows Server 2008 R2的包装盒中的基于UNIX的应用程序子系统中运行。(对于Windows XP,可以下载并安装用于UNIX 3.5版服务)。该工具包有大量的命令行工具TUI,从mv
和du
通过了Korn和C shell,以perl
和awk
。它具有x86-64和IA64两种版本以及x86-32。这些程序在Windows本机的适当POSIX环境中运行,而不是cygwin1.dll
通过Win32 上的仿真器DLL(例如)进行分层。是的,该工具包包含touch
和find
,以及其他300个。
当然,所有这些工具箱都有一个众所周知的缺点,就是要为每个要触摸的文件运行单独的进程。以下替代方案不是问题。
使用touch
人们编写和发布的许多本机Win32 命令之一。 它们中的许多都支持执行递归的选项,而Unix不需要find
环绕它们。(毕竟,它们的目标用户是正在寻找touch
命令的用户群,因为它没有负载大量的Unix命令。)StéphaneDuguay就是touch
其中之一,您可以看到它有一个--recursive
选择。
巧妙掌握CMD的神秘奥秘。 如另一个答案中所述,COPY /B myfile+,,
将使用鲜为人知的COPY
命令“ plus”语法来更新文件的最后修改日期戳(更多信息,请参见此处)。当然,这可以结合起来FOR /R
递归执行操作,如此处另一个答案所暗示的。
使用替换命令解释器,它比CMD更加聪明,更直接。 JP Software的TCC / LE就是这样的一种。它在命令中添加了一个/S
选项,这意味着可以使用“ plus”语法来消除对包装器的需求。但是考虑到TCC / LE具有直接支持选项的内置TOUCH命令,这确实仍然使自己的生活变得不必要。COPY
COPY /S
FOR
/S
COPY /B file+,,
是必经之路,不需要任何额外的东西... :-)
(ls file).LastWriteTime = DateTime.now
要仅使用现有的Windows功能(无需安装其他功能),请尝试以下方法之一:
forfiles /P C:\Path\To\Root /S /C "cmd /c Copy /B @path+,,"
(以递归方式“触摸”从指定路径开始的所有文件)
要么
forfiles /S /C "cmd /c Copy /B @path+,,"
(以递归方式“触摸”从当前目录开始的所有文件)
我知道这可能为时已晚,但是尽管如此,我会留下答案,以防其他人需要相同的东西。
在Windows 7上,John T的答案对我不起作用。经过一番研究,我发现这个名为SKTimeStamp的实用程序可以完美地完成工作。
这是一篇有关其工作原理的详细信息:http : //www.trickyways.com/2009/08/how-to-change-timestamp-of-a-file-in-windows-file-created-modified-and -访问/。
这是您需要执行的步骤:
瞧!您的所有文件均已更新!无需任何Unix实用程序或命令行。
使用powershell:
C:\> powershell (ls your-file-name-here).LastWriteTime = Get-Date
The property 'LastWriteTime' cannot be found on this object.
参考上面的John T的答案:
我试图理解以find
' \;
和' 结尾的'exec命令之间的区别(我不知道后者)。
这很有用:(从这里开始)
-exec command ;
执行命令;如果返回0状态,则为true。所有以下要查找的参数都将作为命令的参数,直到参数由';'组成 遇到。字符串'{}'被当前文件名替换为在命令参数中出现的所有地方,而不仅仅是在单独的参数中(如在某些版本的find中)。
-exec command {} +
-exec操作的此变体在选定的文件上运行指定的命令,但是通过在末尾附加每个选定的文件名来构建命令行。该命令的调用总数将大大少于匹配文件的数目。命令行的构建与xargs构建命令行的方式几乎相同。命令中仅允许使用一个'{}'实例。该命令在起始目录中执行。
考虑一个c:\myfolder
包含2个文件的文件夹a.txt
,b.txt
find . -type f -exec touch {} +
解释为:touch a.txt b.txt
find . -type f -exec touch {} \;
被解释为:touch a.txt
touch b.txt
因此,#1快得多(但也受到以下限制:命令后面exec
只能有一个{}
占位符)。