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

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

[复制链接]
发表于 2021-9-4 08:12:38 | 显示全部楼层 |阅读模式
有文件夹A,文件夹B, 要把文件夹A中的创建时间为前一天的文件复制到文件夹B中,比如今天是9月4号,把9月3号创建的文件复制过去,到9月5号把9月4号的文件复制过去。请各位前辈大佬指点一下
发表于 2021-9-4 08:22:32 | 显示全部楼层
回复 1# 79794133


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

怎样把CMD窗口里的结果复制出来?
http://bbs.bathome.net/thread-3473-1-1.html
 楼主| 发表于 2021-9-4 10:09:02 | 显示全部楼层
回复 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 可用字节
 楼主| 发表于 2021-9-4 10:14:24 | 显示全部楼层
本帖最后由 79794133 于 2021-9-4 10:18 编辑

回复 2# Batcher


    文件名是不包含日期的,我的想法是通过每个文件的创建日期与前一天的日期进行比较,如果相同就进行复制操作。
比如:文件4.txt的创建日期为2021/09/04  13:04,我们只截取前面的日期2021/09/04或者20210904,今天是9月5号,昨天就是9月4号,然后把截取的日期与昨天的日期进行比较,如果两个日期相同就进行复制操作
发表于 2021-9-4 13:41:27 | 显示全部楼层
假设是每天都运行的情况,即把不等于今天的文件复制到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
复制代码
 楼主| 发表于 2021-9-4 13:56:40 | 显示全部楼层
回复 5# hlzj88


    那还有前天的,大前天的,大大前天的文件呢,我只想要昨天的文件
发表于 2021-9-4 14:06:06 | 显示全部楼层
本帖最后由 hlzj88 于 2021-9-4 14:15 编辑

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

如果是不定时执行,又只要昨天的文件,我没有能力判断昨天的日期,比如跨月的日子。今天1号,昨天是30号,31号,不能搞定。
 楼主| 发表于 2021-9-4 16:41:50 | 显示全部楼层
回复 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进行对比,这样你看行吗?
发表于 2021-9-4 17:22:06 | 显示全部楼层
  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放一起
发表于 2021-9-4 19:05:44 | 显示全部楼层
本帖最后由 newswan 于 2021-9-4 19:11 编辑

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

2楼已经写明了
发表于 2021-9-4 22:34:33 | 显示全部楼层
感谢newswan提醒,细节决定成败。
回复 8# 79794133

把/on 改/tc。
发表于 2021-9-5 21:14:13 | 显示全部楼层
回复 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. )
复制代码
 楼主| 发表于 2021-9-6 08:40:50 | 显示全部楼层
回复 12# Batcher


    大佬V5,小弟膜拜
发表于 2021-9-6 09:03:51 | 显示全部楼层
在不考虑其他时间的情况下
其实
robocopy也是可以的

robocopy "C:\123" "C:\234" /maxage:1
 楼主| 发表于 2021-9-6 09:32:12 | 显示全部楼层
回复 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
)

这是通过你的方法改良后的代码,完美解决了我的所有问题,你是我偶像爱你哦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 00:41 , Processed in 0.032980 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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