Board logo

标题: [文件操作] 如何用批处理操作30分钟前创建的文件? [打印本页]

作者: ffin    时间: 2013-9-23 14:38     标题: 如何用批处理操作30分钟前创建的文件?

本帖最后由 foxJL 于 2013-9-24 16:13 编辑

单位操作系统会产生一些文件,
需要人工将30分钟前创建的报文剪切到特定的文件夹
如何用批处理实现操作,比如每3分钟将30分钟前创建的报文剪切过去。
尝试下面的代码,不行,提示找不到操作数
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :rd
  4. for /f "tokens=1-2 delims=:" %%a in ('echo %time%') do set /a th=%%a & set /a tm=%%b & set /a nt=%th%*60+%tm%-30
  5. for /f "tokens=*"  %%a in ('"dir /s /b  e:\test"') do (
  6. set ft=%%~ta
  7. for /f "tokens=1-5 delims=^-,^:, " %%i in ("!ft!") do set /a th=%%l & set /a tm=%%m & set /a ot=!th!*60+!tm!
  8. if !ot! leq %nt% (move "%%a" "e:\test2")
  9. )
  10. ping 127.1 -n 180
  11. goto rd  
  12. endlocal
复制代码

作者: ffin    时间: 2013-9-23 16:22

谁能帮忙分析一下以上代码问题在哪里

意图就是想把 e:\test 下的文件,如果创建时间距离现在超过30分钟的
挪到 e:\test2下去
作者: terse    时间: 2013-9-23 18:34

时间单位出现08时会出错
作者: xpw    时间: 2013-9-23 19:21

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1,2 delims=:" %%a in ('echo.%time% /t') do set /a nowt=0x%%a*60+0x%%b
  3. for /f %%a in ('dir /b e:\test') do (
  4.        set tm=%%~ta
  5.        for /f "tokens=2,3 delims=: " %%b in ('echo.!tm!')do set /a tout=nowt-^(0x%%b*60+0x%%c^)
  6.        if "!nowt!" leq 30 move %%~fa e:\test2
  7. )
复制代码
试着简单做了一个,没做测试,限制有点多
1、时间要24小时制
2、跨天无效
3、移动的源路径不能有空格
作者: ffin    时间: 2013-9-24 09:35

回复 4# xpw

试了一下 还是不行
回头再琢磨琢磨
粗看了一下
赋值似乎有些不对头
作者: apang    时间: 2013-9-24 14:29

本帖最后由 apang 于 2013-9-24 18:10 编辑

放到计划任务里,每3分钟执行一次。没考虑子目录情况。
小时前面少一个0,改一下
  1. @echo off
  2. set "SrcDir=E:\test"
  3. set "DstDir=E:\test2"
  4. echo,D = DateAdd("n",-30,Now)>"%tmp%\$.vbs"
  5. echo,WScript.Echo Year(D)*10000+Month(D)*100+Day(D)^&_>>"%tmp%\$.vbs"
  6. echo,Right("0"^&(Hour(D)*10000+Minute(D)*100+Second(D)),6)>>"%tmp%\$.vbs"
  7. for /f "delims=" %%a in ('cscript /NoLogo "%tmp%\$.vbs"') do set "t=%%a"
  8. for %%a in ("%SrcDir%\") do set "Drv=%%~da" & set "Pth=%%~pa"
  9. set w=wmic datafile where "Drive='%Drv%' and Path='%Pth:\=\\%'"
  10. for /f "tokens=1*" %%a in ('%w% get CreationDate^,Name^|find ":"') do (
  11.     if "%%~na" lss "%t%" (
  12.         for /f "tokens=*" %%c in ("%%b") do move "%%~fc" "%DstDir%\"
  13.     )
  14. )
  15. del "%tmp%\$.vbs"
复制代码

作者: ffin    时间: 2013-9-25 10:58

回复 6# apang

不懂VBS 看的如天书
作者: ffin    时间: 2013-9-29 10:44

还是不行。。。。
作者: DAIC    时间: 2013-9-29 13:07

回复 8# ffin


    你测试的哪个代码?具体哪里不行?




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2