
标题: [文本处理] 求助批处理根据时间判断复制文件到另一个目录中 [打印本页]
作者: xjred 时间: 2021-8-29 12:31 标题: 求助批处理根据时间判断复制文件到另一个目录中
需要备份的文件夹中会在每天晚上01:00-01:59分备份一部分内容,然后是从02:00-02-59分是另一部分的内容,依次类推,每天都会如此,文件名也是同样的,如果不复制出去,第二天会被覆盖写入,没有办法保留,麻烦各位帮助看下,我首先判断了目录是否存在,如果存在就不创建,如果不存在就会创建当天以时间为规范的文件夹,那么我如何取得01:00-01:59分这部分来复制到其他目录呢?- @echo off
- ::主体变量开始
- ::年
- set yy=%date:~0,4%
- ::月
- set mm=%date:~5,2%
- ::日
- set dd=%date:~8,2%
- ::时间
- set time=%time: =0%
- ::固定时间列
- ::需要先创建根目录
- set path=C:\Users\Dell\Desktop\
- set path1=backup_switch\
- set path2=单位\
- ::需要备份的目录
- set back=C:\Users\Dell\Desktop\back\
- ::备注
- 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
- echo 开始执行-----------------------
- ::主体变量开始
- if %time:~0,5% geq 01:00 if %time:~0,5% leq 16:59 goto :hello
- exit
- :hello
- if exist %path% (
- ::判断是否存在根目录
- if exist %path%%path1% (
- rem 目录C:\Users\Dell\Desktop\backup_switch\已存在,无需创建
- echo 目录%path%%path1%已存在,无需创建
- ) else (
- rem 创建C:\Users\Dell\Desktop\backup_switch\
- echo 创建%path%%path1%
- md %path%%path1%
- )
- ::判断是否存在根目录/备份文件夹
- if exist %path%%path1%%path2% (
- rem 目录C:\Users\Dell\Desktop\backup_switch\已存在,无需创建
- echo 目录%path%%path1%%path2%已存在,无需创建
- ) else (
- rem 创建C:\Users\Dell\Desktop\backup_switch\
- echo 创建%path%%path1%%path2%
- md %path%%path1%%path2%
- )
- ::判断是否存在根目录/备份文件夹/日期目录
- if exist %path%%path1%%path2%%yy%-%mm%-%dd% (
- rem 目录C:\Users\Dell\Desktop\backup_switch\已存在,无需创建
- echo 目录%path%%yy%已存在,无需创建
- ) else (
- rem 创建C:\Users\Dell\Desktop\backup_switch\
- echo 创建%path%%path1%%path2%%yy%-%mm%-%dd%
- md %path%%path1%%path2%%yy%-%mm%-%dd%
-
- )
-
- ) else (
- echo !!
- echo !!执行失败,当前系统上不存在%Path2%目录
- echo !!
- )
- set start=12:00
- set end=13:00
- for /r "%back%" %%i in (*) do (
- if "%%~ti"=="%yy%/%mm%/%dd% 12:19" copy %%i %path%%path1%%path2%%yy%-%mm%-%dd%
- )
-
- exit
- pause
复制代码
作者: xjred 时间: 2021-8-29 14:11
麻烦各位大佬帮助看下,写的应该是有问题,copy01:00-01:59分只复制或者移动到这个时间的文件
作者: newswan 时间: 2021-8-29 16:06
本帖最后由 newswan 于 2021-8-29 16:08 编辑
1、是根据备份文件的时间,还是系统时间,移动文件
2、时间比较,只需要比较 hour ,不需要 minute
作者: hlzj88 时间: 2021-8-29 16:42
- @echo off&&setlocal enabledelayedexpansion
-
- :kuai
- echo 在时间范围,3秒等待启动。
- ping /n 3 127.1>nul
- goto gz1
-
- :man
- echo 不在时间范围,半小时等待启动。
- ping /n 1800 127.1>nul
- goto gz1
-
- :gz1
- set yy=%date:~0,4%
- set mm=%date:~5,2%
- set dd=%date:~8,2%
- set time=%time:~0,2%
- set sj=%yy%%mm%%dd%%time%
- echo %sj%
-
- if %sj% lss %yy%%mm%%dd%05 (goto gz2) else (goto man)
-
- :gz2
- if %sj% geq %yy%%mm%%dd%00 (
- md %sj%>nul 2>nul
- move /y *.txt %sj%\
- 路径自己添加
- goto kuai
- )
-
- goto kuai
复制代码
由于if嵌套学的狼狈,只好这样使用了。
文件夹无需判断是否有,用当前时间建立就可以了。
文件也移动到该文件夹,基本没有问题。
采用快慢时间循环,基本可以防止时间跨越。但不敢保证绝对没有问题。
依据你自己文件大小,可以实践中微调快循环等待时间。
作者: xjred 时间: 2021-8-29 18:39
回复 4# hlzj88
非常感谢
作者: xjred 时间: 2021-8-29 19:02
回复 3# newswan
1、是根据备份文件的时间,还是系统时间,移动文件
是根据从文本文件创建的时间,移动和复制都可以,如果复制,第二天的01点至02点会直接覆盖,时间段可以获取到吗,我只需要从01点-02点之间的时间去复制,其他时间,会在写下去,复制或者移动其他文件
2、时间比较,只需要比较 hour ,不需要 minute
作者: newswan 时间: 2021-8-29 22:54
本帖最后由 newswan 于 2021-8-29 23:10 编辑
想多了。既然被覆盖,根据文件时间,移动文件。- @echo off
- setlocal ENABLEDELAYEDEXPANSION
-
-
- set _sour_=111
- set _dest_=222
-
- for /f "usebackq delims=" %%a in (`dir /s /b %_sour_%`) do (
- echo %%a
- set _dt_=%%~ta
- set _dt_=!_dt_:~0,4!-!_dt_:~5,2!!_dt_:~8,2!
- if not exist %_dest_%\!_dt_! md %_dest_%\!_dt_!
- move "%%a" %_dest_%\!_dt_!
- )
复制代码
需要 根据"小时" ?
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
作者: xjred 时间: 2021-8-29 23:56
回复 7# newswan
是的,根据小时,因为从交换设备传过的备份文件是固定的,只能根据不同的交换设备所在的区域配置不同的备份时间,然后根据这个时间来移动或者拷贝到指定文件夹内
作者: newswan 时间: 2021-8-30 13:05
本帖最后由 newswan 于 2021-8-30 13:06 编辑
用计划任务调用批处理,每天调用4次- @echo off
- setlocal ENABLEDELAYEDEXPANSION
-
-
- set _sour_=x:\111
- set _dest_=x:\222
-
- for /f "usebackq delims=" %%a in (`dir /s /b %_sour_%`) do (
- set _dt_=%%~ta
- set _date_=!_dt_:~0,4!-!_dt_:~5,2!!_dt_:~8,2!
- set _time_=!_dt_:~11,2!
- if not exist %_dest_%\!_dt_! md %_dest_%\!_date_!_!_time_!
- move "%%a" %_dest_%\!_date_!_!_time_!
- )
复制代码
作者: xjred 时间: 2021-8-30 13:56
回复 9# newswan
非常感谢已经解决了
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |