标题: 批处理如何判断动态日期copy
[打印本页]
作者: king2789
时间: 2009-6-30 22:24
标题: 批处理如何判断动态日期copy
列如:090628.bak
090629.bak
090630.bak
090701.bak
-----------------------------------------------------------------------------------------------------
需要判断这些日期然后copy到另一台服务器上。
作者: s11ss
时间: 2009-7-1 06:24
if 090628.bak geq 090101.bak echo 今年的备份
作者: fujiang1000
时间: 2009-7-10 00:56
我明白楼主的意思了 楼主的意思可能是 没隔几天都会有几个bak文件产生 但是呢 这些bak文件名是以时间来命名 按照楼主的意思是 比如他想拷贝6月29号之后的文件到服务器上 应该怎么做 呵呵
作者: bobjjh
时间: 2009-8-13 11:37
作者: glbosom
时间: 2009-8-14 20:38
不太明白你的意思 下面是我写的一个诺顿自动升级的p文
你参考下吧
@echo off
color 2f
for /l %%b in (10 1 31) do (mode con cols=70 lines=%%b & ping -n 1 127.1>nul)
for /l %%c in (70 1 95) do mode con cols=%%c lines=30
set cdpath=%cd%
set fh= --------------------------------------------
title=诺顿病毒库自动更新-----今天是:%date%
::自动删除上一次升级文件
if not exist delfile.inf goto :Main
for /f %%v in ('^more ^<delfile.inf') do (
for %%w in (%cdpath%\) do (
if exist %%w\%%v del /q %%w\%%v
))
setlocal enabledelayedexpansion
:Main
:: 日期可以带星期,但是,必须以年月日的顺序排列
:: 年份必须是四位,否则会出错
set filePath=\\10.105.10.12\c
set nums=0
set day=
set days=0
echo.&echo.
::echo 指定的日期是:%day%
set input=1
set ouput=2
:: 提取日期
for /f "tokens=1-3 delims=-/. " %%i in ('date /t') do (
set /a sy=%%i, sm=100%%j %% 100, sd=100%%k %% 100
)
set /a sd-=input
if %sd% leq 0 call :count
:: 提取时间
for /f "tokens=1-2 delims=:" %%x in ("%time%") do (
set /a xs=%%x, fz=%%y)
set /a fz+=ouput
if %fz% GEQ 60 call :counttime
set sm=0%sm%
set sd=0%sd%
set filename=%sy%%sm:~-2%%sd:~-2%
:start
set /a nums+=1
set sz=00%nums%
set "sz1=%sz:~-3%"
if exist %filePath%\%fileName%-%sz1%-x86.exe goto ok
if "%sz:~-3%"=="100" goto notexist
goto start
:ok
color 2e
echo.&echo.
echo %fh%
echo.&echo.
echo 正在拷贝 %fileName%-%sz1%-x86.exe 到本地磁盘
echo.&echo.
echo %fh%
echo.&echo.
echo 请稍等...........
echo.&echo.
echo %fh%
for %%b in (%cdpath%\) do (
copy /y %filePath%\%fileName%-%sz1%-x86.exe %%b>nul
)
at %xs%:%fz% %cdpath%\%fileName%-%sz1%-x86.exe /q>nul
@echo %fileName%-%sz1%-x86.exe>delfile.inf
echo 任务已完成,即将退出
goto :colornum
:count
set /a sm-=1
if !sm! equ 0 set /a sm=12, sy-=1
call :days
set /a sd+=days
if %sd% leq 0 goto count
goto :eof
:days
:: 获取指定月份的总天数
set /a leap="^!(sy %% 4) & ^!(^!(sy %% 100)) | ^!(sy %% 400)"
set /a max=28+leap
set num=0
set str=31 %max% 31 30 31 30 31 31 30 31 30 31
for %%i in (%str%) do (
set /a num+=1
if %sm% equ !num! set days=%%i&goto :eof
)
goto :eof
:counttime
set /a xs+=1
set /a fz-=60
if %xs% equ 24 set /a xs=0
goto :eof
:notexist
cls
echo %fh%
echo.&echo.
echo 现在服务器上不存在最新的病毒库文件
echo 两秒之后自动退出
echo.&echo.
echo %fh%
:colornum
set colornum=-1
:colorSelect
set /a colornum+=1
set colorstr=edcba
color 0!colorstr:~%colornum%,1! & ping -n 2 127.1>nul
if not "%colornum%"=="4" goto :colorSelect
goto :endnum
:endnum
set colsnum=95
set linesnum=30
:End
color 1e
set /a colsnum-=6
set /a linesnum-=2
mode con cols=%colsnum% lines=%linesnum% & ping -n 1 127.1>nul
if not "%colsnum%"=="17" goto :end
@exit