Board logo

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

作者: thp2008    时间: 2023-9-6 14:10     标题: [已解决]如何用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"
复制代码

作者: 路过    时间: 2023-9-6 15:31

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

作者: pd1    时间: 2023-9-6 16:02

  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"
复制代码
这样试试行不行
作者: 77七    时间: 2023-9-6 16:14

  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
复制代码

作者: thp2008    时间: 2023-9-6 16:33

本帖最后由 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分之前的都是可以的。
作者: Batcher    时间: 2023-9-6 17:56

回复 3# pd1


yyyy-MM-dd-hh-mm
修改为:
yyyy-MM-dd-HH-mm
作者: Batcher    时间: 2023-9-6 17:57

回复 2# 路过


    %%~ta获取到的最后修改时间,不是创建时间。
作者: Batcher    时间: 2023-9-6 17:59

以文件的创建时间为准-方法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%'}"
复制代码

作者: thp2008    时间: 2023-9-6 22:40

回复  pd1


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



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




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2