7zip 批量创建文件夹而不是文件名

7zip 批量创建文件夹而不是文件名

我有一个简单的 Windows 批处理脚本,它由备份软件作为备份前操作运行。它只是查找最新的 SQL 转储,将它们压缩为 10 倍小的 7zip 存档,然后云备份会将其拾取并发送到云存储进行存档。

BATCH 创建以 DATE 开头的文件名: 07-10-2018-bak.7z

但是我对 BATCH 文件有问题:

  • 当我手动运行它时,它执行得很好并创建文件名07-10-2018-bak.7z在提供的文件夹中
  • 但是当我通过备份软件(以系统用户身份)运行它作为预备份操作时,它会为每个 DASH 创建子文件夹,如下所示:\07\10\2018-bak.7z

我执行了ECHO每条命令行,结果都很好。即使我手动运行回显的命令行,它们也不会创建文件夹,但它们应该会创建包含日期的完整文件名:

"c:\Program Files\7-Zip\7z.exe" a -mx7 -stl -y "D:\SQL\Backup-Last-Only\\**07-10-2018-bkp.7z**" "D:\SQL\Backup\SklSistem_FULL_sob.BAK"

知道我遗漏了什么重点吗?

@echo off & setlocal enabledelayedexpansion
del D:\SQL\Backup-Last-Only\*.7z /Q
time/t|find "M" && set t=1,4* || set t=1,3*
for /f "skip=1 tokens=%t%" %%a in ('dir/a-d/tw/o-d D:\SQL\Backup\*FULL*.BAK^|find ":"') do (
 if %%a==%date:~-10% (
  set archdate=%%a
  set archdate=!archdate:.=-!
  "c:\Program Files\7-Zip\7z.exe" a -mx7 -stl -y "D:\SQL\Backup-Last-Only\!archdate!-bkp.7z" "D:\SQL\Backup\%%c" 
 ) else goto:eof
)

答案1

此问题可能是由于“日期格式“以及%DATE%使用时脚本生成的环境变量输出”您手动运行的帐户y” 与设置为“备份软件执行该操作的用户帐户“。

您只需要使用set archdate=!archdate:/=-!而不是用set archdate=!archdate:.=-!“替换”而不是“替换”由于您遇到的问题的日期格式差异,您可以使用当前的逻辑进行解释。/-.-

此外,你还应该考虑使用一些更通用的东西例如wmic os get LocalDateTime设置不依赖于每个用户帐户配置文件设置的日期格式/语言环境的变量 - 请参阅批处理文件中不区分语言环境的 %DATE% 和 %TIME%了解一些细节。

脚本

@echo off & setlocal enabledelayedexpansion
del D:\SQL\Backup-Last-Only\*.7z /Q
time/t|find "M" && set t=1,4* || set t=1,3*
for /f "skip=1 tokens=%t%" %%a in ('dir/a-d/tw/o-d D:\SQL\Backup\*FULL*.BAK^|find ":"') do (
 if %%a==%date:~-10% (
  set archdate=%%a
  set archdate=!archdate:/=-!
  "c:\Program Files\7-Zip\7z.exe" a -mx7 -stl -y "D:\SQL\Backup-Last-Only\!archdate!-bkp.7z" "D:\SQL\Backup\%%c" 
 ) else goto:eof
)

更多资源

相关内容