[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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"
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 路过 于 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

评分人数

    • thp2008: 此方法,测试通过,谢谢技术 + 1

TOP

  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"
复制代码
这样试试行不行

TOP

  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

评分人数

    • thp2008: 此方法,测试通过,谢谢技术 + 1
bat小白,请多指教!谢谢!

TOP

本帖最后由 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分之前的都是可以的。

TOP

回复 3# pd1


yyyy-MM-dd-hh-mm
修改为:
yyyy-MM-dd-HH-mm
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# 路过


    %%~ta获取到的最后修改时间,不是创建时间。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

以文件的创建时间为准-方法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

评分人数

    • thp2008: 感谢,老大的帮助!学习一下。技术 + 1
    • 77七: goto :eof 学习了!技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复  pd1


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



我测试了,的确是这个原因,谢谢!

TOP

返回列表