标题: [文件操作] [已解决]如何用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 以后,产生的文件。这个该如何写?- @echo off
- set src=J:\DCIM\100MSDCF
- set desc=I:\2023\20230906\ARW
- set /p date=请输入指定的日期(例:2023/09/05):
- set /p time=请输入指定的时间(例:16:00):
- 。。。。。。。。。。。。。
复制代码
感谢!
下面这句,可以查询出指定日期,如何加上指定时间,就可以引用这句执行的结果作为变量,就可以实现了。不知如何实现日期+时间,双重条件。- 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 编辑
理论可行- @echo off
- set src=J:\DCIM\100MSDCF
- set desc=I:\2023\20230906\ARW
- set /p _date=请输入指定的日期(例:2023/09/05):
- set /p _time=请输入指定的时间(例:16:00):
-
- pushd "%src%\"
- for /f "delims=" %%a in ('dir *.ARW /a-d /b') do (
- if "%%~ta" geq "%_date% %_time%" (
- echo;%%a
- copy %%a %desc%
- )
- )
-
- pause
- exit
复制代码
作者: pd1 时间: 2023-9-6 16:02
- 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
- @echo off
- set src=J:\DCIM\100MSDCF
- set desc=I:\2023\20230906\ARW
- set /p date1=请输入指定的日期(例:2023/09/05):
- set /p time1=请输入指定的时间(例:16:00):
- for /f "tokens=1-3*" %%a in ('dir /a-d /tc /od "%src%\*.ARW" ^|find "/"') do (
- if "%%a%%b" gtr "%date1%%time1%" (
- copy "%src%\%%d" "%desc%"
- )
- )
- 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- @echo off
- set "OldFolder=C:\Test\测试\From"
- set "NewFolder=C:\Test\测试\To"
- set "ThisDate=2023/09/05"
- set "ThisTime=16:00"
- for /f "tokens=1-3*" %%a in ('dir /a-d /tc /od "%OldFolder%\*.txt" ^| findstr /i /e /c:".txt"') do (
- if "%%a %%b" gtr "%ThisDate% %ThisTime%" (
- copy "%OldFolder%\%%d" "%NewFolder%"
- ) else (
- goto :eof
- )
- )
复制代码
以文件的创建时间为准-方法2.bat- @echo off
- set "OldFolder=C:\Test\测试\From"
- set "NewFolder=C:\Test\测试\To"
- set "ThisDate=2023/09/05"
- set "ThisTime=16:00"
- 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- @echo off
- set "OldFolder=C:\Test\测试\From"
- set "NewFolder=C:\Test\测试\To"
- set "ThisDate=2023/09/05"
- set "ThisTime=16:00"
- for /f "tokens=1-3*" %%a in ('dir /a-d /od "%OldFolder%\*.txt" ^| findstr /i /e /c:".txt"') do (
- if "%%a %%b" gtr "%ThisDate% %ThisTime%" (
- copy "%OldFolder%\%%d" "%NewFolder%"
- ) else (
- goto :eof
- )
- )
复制代码
以文件的修改时间为准-方法2.bat- @echo off
- set "OldFolder=C:\Test\测试\From"
- set "NewFolder=C:\Test\测试\To"
- set "ThisDate=2023/09/05"
- set "ThisTime=16:00"
- 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://bbs.bathome.net/) |
Powered by Discuz! 7.2 |