如何使用命令提示符复制在两个日期之间创建的所有文件?

7

我已经编写了一个Windows批处理文件(例如getFiles.bat),可以获取所选日期范围内的所有文件。

xcopy /S /D:01-10-2011  *.* C:\todaysFiles

我想获取两个日期之间所有文件,包括起始日期结束日期
文件扩展名为.cmd或.bat。


你可能需要编辑你的问题,以指定“获取在两个日期之间更改的所有文件”或“获取在两个日期之间创建的所有文件”。 - MSalters
4个回答

16

如果你使用的是Vista/Win7/WinServer2008操作系统,可以使用robocopy命令,如下所示:

robocopy c:\source c:\destination *.* /MAXAGE:20101231 /MINAGE:20111001

在XP上,除了使用PowerShell等工具,我不确定是否有内置的解决方案。


感谢Guido Domenici。我现在正在使用XP。如果有任何问题,我会尝试并回复您。 - Abhishek B.
能否在时间范围内复制文件? - AshokD
@AshokD 要求提及 @<用户名>。 - Abhishek B.
有一些争议,关于/MINAGE/MAXAGE是针对修改日期还是创建日期的,请参见https://serverfault.com/questions/419300/robocopy-minage-and-maxage。由于这构成了问题的基础,因此值得一提。 - Jimadine
有没有办法让Robocopy提供反馈信息? - jeffkenn
提示:在子文件夹中添加“/E”以进行递归 - Damian Vogel

2
这个问题的标题有点误导人。根据提问者的xcopy示例,我认为提问者想知道“如何复制所有创建的文件...”,而不是如何获取所有文件(我将其等同于列出)。
提问者还指出“文件扩展名为.cmd或.bat”。这可能意味着提问者只想复制这些扩展名的文件,但我认为这意味着提问者想要一个批处理脚本解决方案。
要使用以下解决方案,请打开命令提示符并chdir到要复制的文件所在的文件夹。然后输入下面列出的命令,根据需要更改SET值。
SET DESTINATION=C:\destination
SET DATE_FROM=01/01/2005
SET DATE_TO=01/01/2007
> nul forfiles /S /D +%DATE_FROM% /C "cmd /C if @isdir==FALSE 2> nul forfiles /M @file /D -%DATE_TO% && > con ( echo @path && copy /V @path %DESTINATION% )"

注意:这将复制子文件夹中的文件以及顶层文件夹中的文件。
SET值可以直接硬编码到“> nul forfiles…”行中,这意味着只需要一行,但为了清晰起见,我使用了变量替换。
一个注意点是它基于“修改日期”(原问题要求“创建日期”)。
感谢 aschipfl(https://dev59.com/r3fZa4cB1Zd3GeqPWdOb#36585535)提供灵感给我的答案。

0

您还可以使用forfiles命令。它可以在所选根文件夹/p <Path>中递归搜索所有子文件夹/s中创建的文件,对所选文件执行命令/c "<Command>",应用掩码进行搜索/m <SearchMask>,在日期范围内进行搜索/d [{+|-}][{<Date>|<Days>}]

更多信息请点击这里, 以及这里


我认为这个无法处理日期范围。 - SpaceMonkey55

0
这是一个按年份查看文件创建日期的批处理脚本。只需删除额外的百分号符号,即可轻松转换为cmd提示符命令行。
for %%a in (2011 2012 2013 2014 2015 2016 2017) do (
for /f %%i in ('xxcopy i:\podcasts\*.* /LL /ZS /Q /FC /DA:%%a-01-01 /DB:%%a-12-31 ^| find /c /v ""') do echo %%a: %%i
)

请注意,xxcopy不是Windows的本地应用程序。 - SpaceMonkey55

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接