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

[文本处理] 求助批处理根据时间判断复制文件到另一个目录中

需要备份的文件夹中会在每天晚上01:00-01:59分备份一部分内容,然后是从02:00-02-59分是另一部分的内容,依次类推,每天都会如此,文件名也是同样的,如果不复制出去,第二天会被覆盖写入,没有办法保留,麻烦各位帮助看下,我首先判断了目录是否存在,如果存在就不创建,如果不存在就会创建当天以时间为规范的文件夹,那么我如何取得01:00-01:59分这部分来复制到其他目录呢?
  1. @echo off
  2. ::主体变量开始
  3. ::年
  4. set yy=%date:~0,4%
  5. ::月
  6. set mm=%date:~5,2%
  7. ::日
  8. set dd=%date:~8,2%
  9. ::时间
  10. set time=%time: =0%
  11. ::固定时间列
  12. ::需要先创建根目录
  13. set path=C:\Users\Dell\Desktop\
  14. set path1=backup_switch\
  15. set path2=单位\
  16. ::需要备份的目录
  17. set back=C:\Users\Dell\Desktop\back\
  18. ::备注
  19. echo 根据时间不同创建目录不同  
  20. echo    1.这是一个区域 01:00 to 01:59
  21. echo    2.这是一个区域 02:00 to 02:59  
  22. echo    3.这是一个区域 03:00 to 03:59
  23. echo    4.这是一个区域 04:00 to 04:59
  24. echo 开始执行-----------------------  
  25. ::主体变量开始
  26. if %time:~0,5% geq 01:00 if %time:~0,5% leq 16:59 goto :hello
  27. exit
  28. :hello
  29. if exist %path% (
  30. ::判断是否存在根目录  
  31.     if exist %path%%path1% (         
  32.         rem 目录C:\Users\Dell\Desktop\backup_switch\已存在,无需创建  
  33.         echo 目录%path%%path1%已存在,无需创建  
  34.     ) else (  
  35.         rem 创建C:\Users\Dell\Desktop\backup_switch\  
  36.         echo 创建%path%%path1%      
  37.         md %path%%path1%
  38.     )  
  39. ::判断是否存在根目录/备份文件夹  
  40.     if exist %path%%path1%%path2% (         
  41.         rem 目录C:\Users\Dell\Desktop\backup_switch\已存在,无需创建  
  42.         echo 目录%path%%path1%%path2%已存在,无需创建  
  43.     ) else (  
  44.         rem 创建C:\Users\Dell\Desktop\backup_switch\
  45.         echo 创建%path%%path1%%path2%      
  46.         md %path%%path1%%path2%
  47.     )
  48. ::判断是否存在根目录/备份文件夹/日期目录  
  49.     if exist %path%%path1%%path2%%yy%-%mm%-%dd% (         
  50.         rem 目录C:\Users\Dell\Desktop\backup_switch\已存在,无需创建  
  51.         echo 目录%path%%yy%已存在,无需创建  
  52.     ) else (  
  53.         rem 创建C:\Users\Dell\Desktop\backup_switch\
  54.         echo 创建%path%%path1%%path2%%yy%-%mm%-%dd%      
  55.         md %path%%path1%%path2%%yy%-%mm%-%dd%
  56.     )
  57. ) else (  
  58.     echo !!  
  59.     echo !!执行失败,当前系统上不存在%Path2%目录
  60.     echo !!  
  61. )
  62. set start=12:00
  63. set end=13:00
  64. for /r "%back%" %%i in (*) do (
  65. if "%%~ti"=="%yy%/%mm%/%dd% 12:19" copy %%i %path%%path1%%path2%%yy%-%mm%-%dd%
  66. )
  67. exit
  68. pause
复制代码

回复 9# newswan
非常感谢已经解决了

TOP

本帖最后由 newswan 于 2021-8-30 13:06 编辑

用计划任务调用批处理,每天调用4次
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. set _sour_=x:\111
  4. set _dest_=x:\222
  5. for /f "usebackq delims=" %%a in (`dir /s /b %_sour_%`) do (
  6.     set _dt_=%%~ta
  7.     set _date_=!_dt_:~0,4!-!_dt_:~5,2!!_dt_:~8,2!
  8.     set _time_=!_dt_:~11,2!
  9.     if not exist %_dest_%\!_dt_! md %_dest_%\!_date_!_!_time_!
  10.     move "%%a" %_dest_%\!_date_!_!_time_!
  11. )
复制代码

TOP

回复 7# newswan


    是的,根据小时,因为从交换设备传过的备份文件是固定的,只能根据不同的交换设备所在的区域配置不同的备份时间,然后根据这个时间来移动或者拷贝到指定文件夹内

TOP

本帖最后由 newswan 于 2021-8-29 23:10 编辑

想多了。既然被覆盖,根据文件时间,移动文件。
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. set _sour_=111
  4. set _dest_=222
  5. for /f "usebackq delims=" %%a in (`dir /s /b %_sour_%`) do (
  6.     echo %%a
  7.     set _dt_=%%~ta
  8.     set _dt_=!_dt_:~0,4!-!_dt_:~5,2!!_dt_:~8,2!
  9.     if not exist %_dest_%\!_dt_! md %_dest_%\!_dt_!
  10.     move "%%a" %_dest_%\!_dt_!
  11. )
复制代码
需要 根据"小时" ?
echo         根据时间不同创建目录不同  
echo    1.这是一个区域                        01:00 to 01:59
echo    2.这是一个区域                        02:00 to 02:59  
echo    3.这是一个区域                        03:00 to 03:59
echo    4.这是一个区域                        04:00 to 04:59

TOP

回复 3# newswan
1、是根据备份文件的时间,还是系统时间,移动文件
是根据从文本文件创建的时间,移动和复制都可以,如果复制,第二天的01点至02点会直接覆盖,时间段可以获取到吗,我只需要从01点-02点之间的时间去复制,其他时间,会在写下去,复制或者移动其他文件
2、时间比较,只需要比较 hour ,不需要 minute

TOP

回复 4# hlzj88
非常感谢

TOP

  1. @echo off&&setlocal enabledelayedexpansion
  2. :kuai
  3. echo 在时间范围,3秒等待启动。
  4. ping /n 3 127.1>nul
  5. goto gz1
  6. :man
  7. echo 不在时间范围,半小时等待启动。
  8. ping /n 1800 127.1>nul
  9. goto gz1
  10. :gz1
  11. set yy=%date:~0,4%
  12. set mm=%date:~5,2%
  13. set dd=%date:~8,2%
  14. set time=%time:~0,2%
  15. set sj=%yy%%mm%%dd%%time%
  16. echo %sj%
  17. if %sj% lss %yy%%mm%%dd%05 (goto gz2) else (goto man)
  18. :gz2
  19. if %sj% geq %yy%%mm%%dd%00 (
  20.         md %sj%>nul 2>nul
  21.         move /y *.txt %sj%\
  22.         路径自己添加
  23.         goto kuai
  24.          )
  25. goto kuai
复制代码
由于if嵌套学的狼狈,只好这样使用了。

文件夹无需判断是否有,用当前时间建立就可以了。
文件也移动到该文件夹,基本没有问题。
采用快慢时间循环,基本可以防止时间跨越。但不敢保证绝对没有问题。
依据你自己文件大小,可以实践中微调快循环等待时间。
目的,学习批处理

TOP

本帖最后由 newswan 于 2021-8-29 16:08 编辑

1、是根据备份文件的时间,还是系统时间,移动文件
2、时间比较,只需要比较 hour ,不需要 minute

TOP

麻烦各位大佬帮助看下,写的应该是有问题,copy01:00-01:59分只复制或者移动到这个时间的文件

TOP

返回列表