我有一个 .bat 文件 S:\BACKUP_db\copytofileserver.bat,它将一些文件压缩到网络驱动器。它的第一个命令是删除特定网络路径上的旧备份,然后将文件打包到 S:\BACKUP_db 文件夹中。参见:
echo ================================================== >> log.txt
echo %date%, %time%: Backup started >> log.txt
set dow=%date:~0,3% >> log.txt
echo %time%: deleting existing backup... >> log.txt
del /F /S /Q /A "\\192.168.1.249\homes\backup\%dow%.7z" >> log.txt
echo %time%: OK >> log.txt
echo %time%: packing and saving new backup... >> log.txt
if exist *.Backup S:\BACKUP_db\7za a -t7z -mx=1 "\\192.168.1.249\homes\backup\%dow%.7z" S:\Backup_db\*.Backup -m0=BCJ2 -m1=LZMA:d23 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1 -mb0s1:2 -mb0s2:3 >> log.txt
echo %time%: OK >> log.txt
echo %time%: deleting local backup files... >> log.txt
del /F /S /Q /A S:\backup_db\*.Backup >> log.txt
echo %time%: OK >> log.txt
echo %date%, %time%: Backup finished >> log.txt
当我手动运行此 .bat 文件时,它运行良好(文件很大,约 50 GB,压缩后约 5 GB),但是当我在 Windows 调度程序作业中运行此 .bat 文件时,它启动正常,删除网络位置中的文件,但在执行 7zip 程序时它总是卡住。Windows 调度程序显示上次运行结果 = 0x41306。
Windows 调度程序任务的设置似乎正确:仅在用户登录时运行,“以最高权限运行”没有区别,等等。
奇怪的是,以前它可以正常工作,现在却卡住了,我不知道为什么。有时在网络目标处会创建一个 16MB 的压缩文件,有时是 2GB 的文件,这似乎是随机的。
第二轮: 好吧,这就是现在发生的事情 - 我将 bat 文件设置为在指定时间运行,并观察到黑色窗口正在执行我的命令。它再次崩溃,文件创建为:“\192.168.1.249\homes\qi\BackupQIostra\po .7z”,它有 0.6 GB,应该至少有 5 GB。此外,在 bat 文件中,我按照建议将所有本地路径替换为“%~dp0”,没有变化。日志文件输出:
==================================================
po 04. 08. 2014, 11:00:00,40: Backup started
11:00:00,44: deleting existing backup...
Deleted file - \\192.168.1.249\homes\backup\po .7z
11:00:00,49: OK
11:00:00,50: packing and saving new backup...
此后,我双击运行.bat 文件并观察发生了什么,压缩顺利,创建了 5 GB 的文件,日志输出完整:
==================================================
po 04. 08. 2014, 11:37:37,60: Backup started
11:37:37,61: deleting existing backup...
Deleted file - \\192.168.1.249\homes\backup\po .7z
11:37:37,63: OK
11:37:37,63: packing and saving new backup...
7-Zip (A) 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
Scanning
Creating archive \\192.168.1.249\homes\backup\po .7z
Compressing 20225_20140804030000 - Copy.Backup
Compressing 20225_20140804030000.Backup
Everything is Ok
12:53:59,52: OK
12:53:59,52: deleting local backup files...
Deleted file - S:\BACKUP_db\20225_20140804030000 - Copy.Backup
Deleted file - S:\BACKUP_db\20225_20140804030000.Backup
12:54:02,18: OK
po 04. 08. 2014, 12:54:02,18: Backup finished
答案1
似乎将任务委托给 hstart 实用程序解决了这个问题。这是一种变通方法,我失去了从 7zip 获取任何反馈的能力,但 bat 文件现在可以正常工作并完成任务。
所以我替换了这个:
if exist *.Backup %~dp0\7za a -t7z -mx=1 "\\192.168.1.249\homes\qi\BackupQIostra\%dow%.7z" %~dp0\*.Backup -m0=BCJ2 -m1=LZMA:d23 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1 -mb0s1:2 -mb0s2:3 >> log.txt
有了这个:
if exist *.Backup "%~dp0hstart\hstart.exe" /NOCONSOLE /RUNAS /NOUAC /SHELL /WAIT /D="%~dp0" /BELOWNORMAL "%~dp07za a -t7z -mx=1 "\\192.168.1.249\homes\qi\BackupQIostra\%dow%.7z" %~dp0*.Backup -m0=BCJ2 -m1=LZMA:d23 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1 -mb0s1:2 -mb0s2:3" >> log.txt
但:
现在,当我观察它由调度程序运行时,我注意到一件奇怪的事情。我的 .bat 文件已启动,hstart 在外部运行 7zip 命令,等待 hstart/7zip 任务完成的主黑色命令窗口在约 5 分钟后消失!但 7zip 外部命令仍在运行、隐藏并正确完成。当然,日志文件不完整,仍然堆叠在中间,因为主窗口崩溃了。所以现在我确信,是主命令窗口崩溃了。
答案2
我认为%systemroot%\System32
当使用服务或调度程序启动时当前目录。可能需要添加:
CD S:\BACKUP_db\
答案3
我还从 yask 调度程序运行了 .bat 文件。我的问题是:“设置”选项卡上有“如果任务运行时间超过:则停止任务”,我更改了它。但在触发器内部也有同样的情况。这导致我的控制台应用程序在 30 分钟内停止(默认设置)。因此它可以手动运行,但0x41306
任务调度程序运行时出现错误。
我在寻找解决方案时来到这里,希望它能对某人有所帮助。