找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21212|回复: 8

[文件操作] [已解决]如何用BAT脚本复制指定日期和时间之后的文件?

[复制链接]
发表于 2023-9-6 14:10:33 | 显示全部楼层 |阅读模式
本帖最后由 thp2008 于 2023-9-6 17:14 编辑

比如,我想复制 J:\DCIM\100MSDCF\*.ARW  到 I:\2023\20230906\ARW 目录下面。但是我只想复制 2023/09/05  16:00 以后,产生的文件。这个该如何写?
  1. @echo off
  2. set src=J:\DCIM\100MSDCF
  3. set desc=I:\2023\20230906\ARW
  4. set /p date=请输入指定的日期(例:2023/09/05):
  5. set /p time=请输入指定的时间(例:16:00):
  6. 。。。。。。。。。。。。。
复制代码
感谢!

下面这句,可以查询出指定日期,如何加上指定时间,就可以引用这句执行的结果作为变量,就可以实现了。不知如何实现日期+时间,双重条件。
  1. PowerShell "Get-ChildItem -Path 'J:\DCIM\100MSDCF' -Force -Recurse -ea SilentlyContinue | ?{$_.LastWriteTime.ToString('yyyy-MM-dd') -gt '2023-09-05' -and $_.PsISContainer -ne $True} | select FullName"
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2023-9-6 15:31:52 | 显示全部楼层
本帖最后由 路过 于 2023-9-6 15:40 编辑

理论可行

  1. @echo off
  2. set src=J:\DCIM\100MSDCF
  3. set desc=I:\2023\20230906\ARW
  4. set /p _date=请输入指定的日期(例:2023/09/05):
  5. set /p _time=请输入指定的时间(例:16:00):

  6. pushd "%src%"
  7. for /f "delims=" %%a in ('dir *.ARW /a-d /b') do (
  8.         if "%%~ta" geq "%_date% %_time%" (
  9.                 echo;%%a
  10.                 copy %%a %desc%
  11.         )
  12. )

  13. pause
  14. exit
复制代码

评分

参与人数 1技术 +1 收起 理由
thp2008 + 1 此方法,测试通过,谢谢

查看全部评分

发表于 2023-9-6 16:02:15 | 显示全部楼层
  1. PowerShell "Get-ChildItem -Path 'J:\DCIM\100MSDCF' -Force -Recurse -ea SilentlyContinue | ?{$_.LastWriteTime.ToString('yyyy-MM-dd-hh-mm') -gt '2023-09-05-16-00' -and $_.PsISContainer -ne $True} | select FullName"
复制代码
这样试试行不行
发表于 2023-9-6 16:14:19 | 显示全部楼层
  1. @echo off
  2. set src=J:\DCIM\100MSDCF
  3. set desc=I:\2023\20230906\ARW
  4. set /p date1=请输入指定的日期(例:2023/09/05):
  5. set /p time1=请输入指定的时间(例:16:00):
  6. for /f "tokens=1-3*" %%a in ('dir /a-d /tc /od "%src%\*.ARW" ^|find "/"') do (
  7.         if "%%a%%b" gtr "%date1%%time1%" (
  8.                 copy "%src%\%%d" "%desc%"
  9.         )
  10. )
  11. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
thp2008 + 1 此方法,测试通过,谢谢

查看全部评分

 楼主| 发表于 2023-9-6 16:33:52 | 显示全部楼层
本帖最后由 thp2008 于 2023-9-6 16:47 编辑
这样试试行不行
pd1 发表于 2023-9-6 16:02


这个我运行后,没有报错,也不有输出。

多次测试发现,如果时间输入超过12:24分这样,就不行了,比如12:25 就不行13:00 、 16:00 这种都不行,是不是超过12:24分后的时间的表述不是这样的。但其实目录下都是有相关时间段的文件的。

11:55 、09:38 这样的时间可以

只要时间不超过 12:24分之前的都是可以的。
发表于 2023-9-6 17:56:07 | 显示全部楼层
回复 3# pd1


yyyy-MM-dd-hh-mm
修改为:
yyyy-MM-dd-HH-mm
发表于 2023-9-6 17:57:00 | 显示全部楼层
回复 2# 路过


    %%~ta获取到的最后修改时间,不是创建时间。
发表于 2023-9-6 17:59:43 | 显示全部楼层
以文件的创建时间为准-方法1.bat
  1. @echo off
  2. set "OldFolder=C:\Test\测试\From"
  3. set "NewFolder=C:\Test\测试\To"
  4. set "ThisDate=2023/09/05"
  5. set "ThisTime=16:00"
  6. for /f "tokens=1-3*" %%a in ('dir /a-d /tc /od "%OldFolder%\*.txt" ^| findstr /i /e /c:".txt"') do (
  7.     if "%%a %%b" gtr "%ThisDate% %ThisTime%" (
  8.         copy "%OldFolder%\%%d" "%NewFolder%"
  9.     ) else (
  10.         goto :eof
  11.     )
  12. )
复制代码
以文件的创建时间为准-方法2.bat
  1. @echo off
  2. set "OldFolder=C:\Test\测试\From"
  3. set "NewFolder=C:\Test\测试\To"
  4. set "ThisDate=2023/09/05"
  5. set "ThisTime=16:00"
  6. powershell "Get-ChildItem -Path '%OldFolder%' -Recurse -ErrorAction:SilentlyContinue | Where-Object {(($_.CreationTime.ToString('yyyy/MM/dd HH:mm') -gt '%ThisDate% %ThisTime%') -and $_.PsISContainer -ne $True)} | ForEach-Object {Copy-Item -Path $_.FullName -Destination '%NewFolder%'}"
复制代码
以文件的修改时间为准-方法1.bat
  1. @echo off
  2. set "OldFolder=C:\Test\测试\From"
  3. set "NewFolder=C:\Test\测试\To"
  4. set "ThisDate=2023/09/05"
  5. set "ThisTime=16:00"
  6. for /f "tokens=1-3*" %%a in ('dir /a-d /od "%OldFolder%\*.txt" ^| findstr /i /e /c:".txt"') do (
  7.     if "%%a %%b" gtr "%ThisDate% %ThisTime%" (
  8.         copy "%OldFolder%\%%d" "%NewFolder%"
  9.     ) else (
  10.         goto :eof
  11.     )
  12. )
复制代码
以文件的修改时间为准-方法2.bat
  1. @echo off
  2. set "OldFolder=C:\Test\测试\From"
  3. set "NewFolder=C:\Test\测试\To"
  4. set "ThisDate=2023/09/05"
  5. set "ThisTime=16:00"
  6. powershell "Get-ChildItem -Path '%OldFolder%' -Recurse -ErrorAction:SilentlyContinue | Where-Object {(($_.LastWriteTime.ToString('yyyy/MM/dd HH:mm') -gt '%ThisDate% %ThisTime%') -and $_.PsISContainer -ne $True)} | ForEach-Object {Copy-Item -Path $_.FullName -Destination '%NewFolder%'}"
复制代码

评分

参与人数 2技术 +2 收起 理由
thp2008 + 1 感谢,老大的帮助!学习一下。
77七 + 1 goto :eof 学习了!

查看全部评分

 楼主| 发表于 2023-9-6 22:40:45 | 显示全部楼层
回复  pd1


yyyy-MM-dd-hh-mm
修改为:
yyyy-MM-dd-HH-mm
Batcher 发表于 2023-9-6 17:56



我测试了,的确是这个原因,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 14:15 , Processed in 0.018893 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表