3

我目前必须将 Windows 批处理文件首先获取以 .bak 结尾的目录中的所有文件,然后将它们添加到名称为今天日期的 rar 文件中

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

第一个代码是

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

我以 rar 文件的名称作为参数从 cmd 提示中手动调用

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

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

谢谢

4

2 回答 2

1

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

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

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
于 2013-10-21T11:52:37.377 回答
0

我不喜欢您的脚本中的几件事:我不知道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 脚本的解释。

于 2013-10-21T11:32:49.237 回答