我有一个简单的Windows批处理脚本,该脚本由备份软件作为预备份操作运行。它只是查找最新的SQL转储,将其压缩为7倍较小的7zip存档,然后由云备份将其提取并发送到云存储以进行存档。
BATCH使用前面的DATE创建文件名:07-10-2018-bak.7z
但是我对BATCH文件有问题:
\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
)
此问题可能是由于“日期格式”和%DATE%
脚本使用“从手动运行它的帐户”生成的环境变量输出与使用“备份软件执行的用户帐户”设置的格式不同而导致的它”。
你只需要使用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
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句