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

时间:2011-01-24 06:35:46

标签: batch-file command command-prompt

我在窗口批处理文件(eq.getFiles.bat)中编写了代码,可以获取所选日期范围内的所有文件。 EQ。

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

但我希望在两个日期之间获取所有文件,包括从日期到目前为止
文件扩展名为.cmd或.bat

4 个答案:

答案 0 :(得分:11)

如果您使用的是Vista / Win7 / WinServer2008,可以使用robocopy,如下所示:

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

在XP上,我不确定是否有使用Powershell之类的内置解决方案。

答案 1 :(得分: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...行,这意味着只需要一行,但为了清楚起见,我使用了变量替换。

需要注意的是,它基于date modified(问date created的原始问题)

归功于 aschipfl https://stackoverflow.com/a/36585535/1754517),为我的回答提供灵感。

答案 2 :(得分:0)

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

more info hereand here

答案 3 :(得分: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
)