【问题标题】:compress a SQL backup file through winrar通过winrar压缩一个SQL备份文件
【发布时间】:2019-07-14 15:50:38
【问题描述】:

我在 Windows 批处理文件中使用以下命令在 C:\temp 文件夹中生成一个备份文件。

我不知道为什么不工作并且没有显示任何错误

ECHO OFF
for /f %%a in ('date /t') do set DAY=%%a
SET rarFile=C:\temp\DATA%DAY%Backup.rar
echo 
"C:\Program Files\WinRAR\Rar" a -r -df %rarFile% C:\temp\*Backup.bak

【问题讨论】:

  • 在脚本顶部打开ECHO ON 并从命令提示符而不是使用鼠标运行脚本。通过编辑将控制台的所有输出复制并粘贴到您的问题中。
  • 查看date /t 命令的输出,看看它是否包含Windows 文件名中不允许出现的字符,例如/。然后你可以考虑双引号%rarFile%
  • 为什么要在DATABackup之间的文件名?在使用 Rar/WinRAR 选项 -agYYYY-MM-DD(国际日期格式)在文件扩展名之前附加文件名末尾的日期时,您只需要一行使用 Rar.exe,就是这样。参见 WinRAR 程序文件目录中的文本文件Rar.txt。这个简单的解决方案也将独立于为运行批处理文件所使用的用户帐户设置的国家/地区。
  • 顺便说一句:for /f %%a in ('date /t') do set "DAY=%%a"set "DAY=%DAY:/=_%" 是获取和格式化当前区域设置日期以在文件名中使用的最糟糕的方法。在后台以for开始一个新的命令进程来执行带有选项/T的命令date,捕获这个输出,用for处理它,将它分配给一个环境变量,然后替换所有/ by _ 在日期字符串中。只需 set "DAY=%DATE:/=_%" by cmd.exe 已经运行以逐行处理批处理文件,从而可以直接使用 %DATE:/=_% 来完成完全相同的操作。
  • 换句话说,@"%ProgramFiles%\WinRAR\Rar.exe" a -r -df "C:\Temp\DATA%DATE:/=_%Backup.rar" "C:\Temp\*Backup.bak" 是整个批处理文件的单行替换,以及更好的@"%ProgramFiles%\WinRAR\Rar.exe" a -agYYYY-MM-DD -ep1 -r -df "C:\Temp\DATA_Backup_.rar" "C:\Temp\*Backup.bak" 存储与模式*Backup.bak 匹配的文件,而文件C:\Temp\DATA_Backup_YYYY-MM-DD.rar 中没有路径。国际日期格式有一个很大的优势,即按名称排序的带有YYYY-MM-DD 的文件名同时按时间顺序排序。

标签: batch-file rar


【解决方案1】:

也许将 / 替换为 _ 并让我们正确使用 set 来设置可能有空格的目录路径:

@echo off
for /f %%a in ('date /t') do set "DAY=%%a"
set "DAY=%DAY:/=_%"
set "rarFile=C:\temp\DATA%DAY%Backup.rar"
echo "C:\Program Files\WinRAR\Rar" a -r -df "%rarFile%" "C:\temp\*Backup.bak"
pause

现在这只会echo 命令,所以一旦你满意它的工作,从最后一行删除echo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 2013-12-08
    • 2013-10-03
    相关资源
    最近更新 更多