特别需要注意的是赋值中间不能有空格如:set TmpFile=tmp.ini
该批处理脚本的作用是查找日期大于等于lastUploadDir.ini配置文件所写日期的 6位日期的文件夹如
080526等,然后把这些目录所有文件打成zip包如080526.zip 然后ftp到目的服务器,回写lastUploadDir.ini
为最大上送日期,删除本地目录所有zip文件
@echo off
@echo -----------------处理开始%date%%time%
setlocal ENABLEDELAYEDEXPANSION
set TmpFile=tmp.ini
set /p ini=<lastUploadDir.ini
set /a datesub=0
set PosDir=D:\CallCenter\Server\Pos\
rem 获取当前日期
::set nowdate=%date:~0,4%%date:~5,2%%date:~8,2%
::set tempDate=%nowdate%
call :DATESUB %datesub% DN
set nowdate=%DN%
set tempDate=%DN%
@echo %tempDate%
:FindDir
set /a datesub=%datesub% +1
set nowDir=%PosDir%%tempDate:~2,6%
if exist "%nowDir%" (
@echo 目录存在%nowDir%
@echo --开始压缩%nowDir% %date%%time%
rar a -inul %nowDir%.zip %nowDir%
@echo --压缩完成%nowDir% %date%%time%
) else (
@echo 目录不存在%nowDir%
goto :FindDirError
)
if "%tempDate%" GTR "%ini%" (
call :DATESUB %datesub% DN
set tempDate=!DN!
goto :FindDir
)
:FindDirSucess
::所有目录成功,把日期写入ini文件
>"%TmpFile%" echo %nowdate%
move /y "%~dp0%TmpFile%" lastUploadDir.ini
:FindDirError
@echo 开始上传所有zip文件 %date%%time%
ftp -v -n -s:ftpconfig.ini 200.200.200.2
@echo 开始上传所有zip文件 %date%%time%
@echo 开始删除本地所有zip文件 %date%%time%
del %PosDir%*.zip
@echo 结束删除本地所有zip文件 %date%%time%
endlocal
@echo ----------------------处理完成 %date%%time%
GOTO :EOF
:DATESUB
::日期相减函数
::格式 call :DATESUB 需要减的天数 接收结果的变量
::%1 =>_tian
::%2 =>receive
::取n天之前的日期.set _tian=n下面这句中的n代表天数.
set "_tian=%1"
>tmptmp.vbs echo wscript.echo dateadd("d",-%_tian%,date)
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo tmptmp.vbs') do (
set "y=%%i"&set "m=%%j"&set "d=%%k"
)
if %m% LSS 10 set "m=0%m%"
if %d% LSS 10 set "d=0%d%"
set "%2=%y%%m%%d%"
goto :EOF
::设定结果变量,结束call调用