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

[文件操作] 批处理自动复制文件夹下的前一天的所有文件

有文件夹A,文件夹B, 要把文件夹A中的创建时间为前一天的文件复制到文件夹B中,比如今天是9月4号,把9月3号创建的文件复制过去,到9月5号把9月4号的文件复制过去。请各位前辈大佬指点一下

回复 1# 79794133


文件名里面是否包含日期?
如果包含,请发一个完整的文件名出来。
如果不包含,请打开一个CMD窗口执行命令 dir /tc 把结果发出来看看。

怎样把CMD窗口里的结果复制出来?
http://bbs.bathome.net/thread-3473-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# Batcher


    E:\A>dir
驱动器 E 中的卷没有标签。
卷的序列号是 497E-ACE6

E:\A 的目录

2021/09/05  10:07    <DIR>          .
2021/09/05  10:07    <DIR>          ..
2021/09/01  13:04                 0 1.txt
2021/09/02  13:03                 0 2.txt
2021/09/03  11:38                 0 3.txt
2021/08/31  13:04                 0 31.txt
2021/09/04  13:04                 0 4.txt
               5 个文件              0 字节
               2 个目录 183,412,678,656 可用字节

TOP

本帖最后由 79794133 于 2021-9-4 10:18 编辑

回复 2# Batcher


    文件名是不包含日期的,我的想法是通过每个文件的创建日期与前一天的日期进行比较,如果相同就进行复制操作。
比如:文件4.txt的创建日期为2021/09/04  13:04,我们只截取前面的日期2021/09/04或者20210904,今天是9月5号,昨天就是9月4号,然后把截取的日期与昨天的日期进行比较,如果两个日期相同就进行复制操作

TOP

假设是每天都运行的情况,即把不等于今天的文件复制到b文件夹。因为不可能有明天的文件。
  1. @echo off&&setlocal enabledelayedexpansion
  2. for /f %%i in ('dir /b /s /on "a\*.*"') do (
  3.   set mm=%%~ti
  4.   set sj=!mm:~0,10!
  5.   if !sj! == %date:~0,10% (echo 今天的%%i) else (move /y %%i b\)
  6.   )
  7. pause
复制代码
目的,学习批处理

TOP

回复 5# hlzj88


    那还有前天的,大前天的,大大前天的文件呢,我只想要昨天的文件

TOP

本帖最后由 hlzj88 于 2021-9-4 14:15 编辑

回复 6# 79794133
按你顶楼的说法,只有两个文件夹,a里只保留当天的文件,不是当天的文件都是到b,无非是哪一天执行批处理,这样子前天大前天有关系吗。也许你该改顶楼的要求细节。

如果是不定时执行,又只要昨天的文件,我没有能力判断昨天的日期,比如跨月的日子。今天1号,昨天是30号,31号,不能搞定。
目的,学习批处理

TOP

回复 7# hlzj88


   d = date() - 1
wscript.echo year(d) * 10000 + month(d) * 100 + day(d)
以上是VBS代码,新建记事本保存为.VBS即可。

for /f %%a in ('cscript //nologo yester.vbs') do set yesterday=%%a
这一句保存为.bat文件,yesterday即是昨天的日期

然后用批处理获得文件夹下的文件创建日期,与yesterday进行对比,这样你看行吗?

TOP

  1. @echo off&&setlocal enabledelayedexpansion
  2. for /f %%a in ('cscript //nologo yester.vbs') do set yesterday=%%a
  3. for /f %%i in ('dir /b /s /on "a\*.txt"') do (
  4.   echo %%:~ni
  5.   set mm=%%~ti
  6.   set sj=!mm:~0,4!!mm:~5,2!!mm:~8,2!
  7.   if !sj! == %yesterday% move /y %%i b\
  8. )
  9. pause
复制代码
需和你的vbs放一起
目的,学习批处理

TOP

本帖最后由 newswan 于 2021-9-4 19:11 编辑

创建时间 ? 修改时间
dir 一般 得到的时间是修改时间
dir /tc 才是创建时间

2楼已经写明了

TOP

感谢newswan提醒,细节决定成败。
回复 8# 79794133

把/on 改/tc。
目的,学习批处理

TOP

回复 3# 79794133
  1. @echo off
  2. set "SrcFolder=D:\Test\A"
  3. set "DstFolder=D:\Test\B"
  4. set "DaysAgo=1"
  5. for /f %%i in ('powershell -c "Get-Date (Get-Date).AddDays(-%DaysAgo%) -uformat "%%Y/%%m/%%d""') do (
  6.     set "DstDate=%%i"
  7. )
  8. for /f "delims=" %%i in ('dir /b /a-d "%SrcFolder%"') do (
  9.     call :CheckFile "%%i"
  10. )
  11. goto :eof
  12. :CheckFile
  13. for /f "skip=5" %%j in ('dir /tc "%SrcFolder%\%~1"') do (
  14.     if "%%j" equ "%DstDate%" (
  15.         copy /y "%SrcFolder%\%~1" "%DstFolder%\"
  16.     )
  17.     goto :eof
  18. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 12# Batcher


    大佬V5,小弟膜拜

TOP

在不考虑其他时间的情况下
其实
robocopy也是可以的

robocopy "C:\123" "C:\234" /maxage:1

TOP

回复 12# Batcher


@echo off
set "SrcFolder=E:\A"
set "DaysAgo=1"
for /f %%i in ('powershell -c "Get-Date (Get-Date).AddDays(-%DaysAgo%) -uformat "%%Y/%%m/%%d""') do (
    set "DstDate=%%i"
)
set "yesterday=%DstDate:~0,4%%DstDate:~5,2%%DstDate:~8,2%
md  e:\backup\%yesterday%
set   "DstFolder=e:\backup\%yesterday%"

for /f "delims=" %%i in ('dir /b /a-d "%SrcFolder%"') do (
    call :CheckFile "%%i"
)
goto :eof
:CheckFile
for /f "skip=5" %%j in ('dir /tc "%SrcFolder%\%~1"') do (
    if "%%j" equ "%DstDate%" (
        copy /y "%SrcFolder%\%~1" "%DstFolder%\"
    )
    goto :eof
)

这是通过你的方法改良后的代码,完美解决了我的所有问题,你是我偶像爱你哦

TOP

返回列表