如何使用命令提示符复制在两个日期之间创建的所有文件?
Posted
技术标签:
【中文标题】如何使用命令提示符复制在两个日期之间创建的所有文件?【英文标题】:How to copy all files created between two dates using Command prompt? 【发布时间】:2011-06-14 08:07:33 【问题描述】:我在窗口批处理文件 (eq. getFiles.bat ) 中编写了代码,用于获取选定日期范围内的所有文件。 等式。
xcopy /S /D:01-10-2011 *.* C:\todaysFiles
但我想获取两个日期之间的所有文件,包括 From date 和 To date。 文件扩展名为 .cmd 或 .bat
【问题讨论】:
您可能想要编辑您的问题以指定“在两个日期之间获取所有文件更改”或“在两个日期之间获取所有文件创建” . 【参考方案1】:如果您使用的是 Vista/Win7/WinServer2008,您可以像这样使用robocopy
:
robocopy c:\source c:\destination *.* /MAXAGE:20101231 /MINAGE:20111001
在 XP 上,我不确定是否有没有使用 Powershell 等的内置解决方案。
【讨论】:
感谢 Guido Domenici。现在我正在使用 XP。如果有任何问题,我会尝试并回复您。 是否可以在时间范围内复制文件? @AshokD 询问提及@/MINAGE
和/MAXAGE
是修改日期还是创建日期存在争议,请参见serverfault.com/questions/419300/robocopy-minage-and-maxage。由于这是问题的基础,因此值得一提。
有没有办法让 robocopy 给出反馈?【参考方案2】:
您也可以使用forfiles
命令。它可以在所有子文件夹/s
中递归搜索在所选根文件夹/p <Path>
中创建的文件,对所选文件/c "<Command>"
执行命令,应用掩码搜索/m <SearchMask>
,在日期范围/d [+|-][<Date>|<Days>]
之间
more info here, and here
【讨论】:
【参考方案3】:这是一个按年份按创建日期查看文件的批次。通过删除多余的百分比符号轻松更改为 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
)
【讨论】:
【参考方案4】:这个问题的标题有点误导。基于提问者的xcopy
示例,我相信提问者想知道“如何复制所有创建的文件......”,而不是如何获取所有文件(我等同于list)。
提问者还说“文件扩展名是 .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...
行中,这意味着只需要一行,但为了清楚起见,我使用了变量替换。
需要注意的是它基于date modified
(原始问题要求date created
)
感谢 aschipfl (https://***.com/a/36585535/1754517) 为我的回答提供了灵感。
【讨论】:
以上是关于如何使用命令提示符复制在两个日期之间创建的所有文件?的主要内容,如果未能解决你的问题,请参考以下文章