繁体   English   中英

windows批处理文件到zip然后ftp文件

[英]windows batch file to zip and then ftp file

我目前必须使用Windows批处理文件,首先将所有文件放在一个以.bak结尾的目录中,然后将它们添加到rar文件中,名称中包含今天的日期

第二个将rar文件ftp到另一台服务器。

第一个代码是

set path="C:\Program Files\WinRAR\";%path%
set date=%dd-mm-yyyy%
rar a D:\backups\dbs.rar -ri1 -mt2 -ag[dd-mm-yyyy] -m5 D:\backups\*.BAK
del D:\backups\*.BAK

当它完成备份数据库时从sql server manager内部调用,但可以很容易地从计划任务运行

秒代码是

@echo off
echo user Dbusser> ftpuploader.dat
echo ftppassword>> ftpuploader.dat
echo bin>> ftpuploader.dat
echo put %1>> ftpuploader.dat
echo quit>> ftpuploader.dat
ftp -n -s:ftpuploader.dat 127.0.0.1
del ftpuploader.dat

我从cmd promt手动调用rar文件的名称作为参数

ftpuploader.bat d:\pathtorar\dbs[21-10-2013].rar

我想知道的是,任何人都可以告诉我如何合并这两个文件,以便一旦创建并完成它就自动上传文件,或者自动执行计划任务,以便每天更改rar文件名称中的日期位

谢谢

这需要XP Pro和更高版本才能使用Wmic。

它以可靠的方式使用日期设置变量,并使用它来创建RAR文件名并启动FTP批处理文件。

if not errorlevel 1 del D:\\backups\\*.BAK我更改了这一行if not errorlevel 1 del D:\\backups\\*.BAK如果RAR归档由于任何原因失败,应该保护* .bak文件不被删除。

@echo off
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"

set "datestamp=%DD%-%MM%-%YYYY%"

set path="C:\Program Files\WinRAR\";%path%
rar a D:\backups\dbs[%datestamp%].rar -ri1 -mt2 -m5 D:\backups\*.BAK
if not errorlevel 1 del D:\backups\*.BAK
ftpuploader.bat D:\backups\dbs[%datestamp%].rar

在我的脚本中我不喜欢的事情很少:我不知道什么set date=%dd-mm-yyyy%正在做什么。不确定何时删除* bak文件。如果您尝试上传二进制文件,则需要以二进制模式设置ftp脚本。 这是在没有临时文件的情况下执行此操作的一种可能方法:

!&cls&echo off&setlocal ENABLEDELAYEDEXPANSION
!goto :end_ftp
!rem :: ftp part
open server
Dbusser
ftppassword
prompt
binary
mput *.BAK
bye

:end_ftp
set path="C:\Program Files\WinRAR\";%path%

rem get _date in format DD-MM-YYYY 
Set /A "Jan=1,Feb=2,Mar=3,Apr=4,May=5,Jun=6,Jul=7,Aug=8,Sep=9,Oct=10,Nov=11,Dec=12"
Type Nul >"%TEMP%\~.ddf"
Makecab /D RptFileName="%TEMP%\~.rpt" /D InfFileName=Nul /F "%TEMP%\~.ddf" >Nul
Set /P "timestamp=" <"%TEMP%\~.rpt"
For /F "tokens=3-9 delims=: " %%a In ("%timestamp%") Do (
    Set /A "year=%%g,month=%%b,day=1%%c-100"
)
Del /Q "%TEMP%\~.*"
Echo year=%year% month=%month% day=%day%
set "_date=%day%-%month%-%year%"
rem date is ready to use

rar a D:\backups\dbs.rar -ri1 -mt2 -ag[%_date%] -m5 D:\backups\%_date%\*.BAK

pushd D:\backups\%_date%\*.BAK
ftp -s:%~dpsnx0
popd
del D:\backups\%_date%\*.BAK /Q /F 
RD /S /Q D:\backups\%_date%\

我的想法是你创建一个带有日期名称的目录(我想你的日期格式是dd-mm-yyyy),然后在这个目录中启动ftp并使用提示符(超过提示)然后使用mput上传所有文件使用.bak扩展名。因此ftp脚本不需要任何参数。以下是对自包含ftp脚本的更多解释

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM