![帮助创建 bat 文件来安排备份](https://linux22.com/image/485363/%E5%B8%AE%E5%8A%A9%E5%88%9B%E5%BB%BA%20bat%20%E6%96%87%E4%BB%B6%E6%9D%A5%E5%AE%89%E6%8E%92%E5%A4%87%E4%BB%BD.png)
我在 C:\Program Files\ApplcationName\filename.mdb 中有一个 mdb 文件。请告诉我使用 .bat 文件将备份到文件夹 C:\Backup 的 COPY 命令。简而言之,我遇到问题是因为“Program”和“Files”之间的空格。
谢谢 jaz
答案1
备份的文件名部分是最难创建的部分。您需要能够每天创建一个新文件而不必太麻烦。因此,我使用以下方法:
如果你将其中两个答案(我的答案和前一个答案)结合起来,你就会得到这个宝石:
set mydate=%date:~10,4%_%date:~4,2%_%date:~7,2%
xcopy "%ProgramFiles%\ApplicationName\filename.mdb" C:\Backup\%mydate%_filename.mdb /H /K /O /Y
这样做会给你一个每天运行的文件,以日期命名。
完整的备份脚本如下所示
@echo off
:: Yes this looks bad, but it works, it sets the file veriable mydate to YYYY_MM_DAY
set mydate=%date:~10,4%_%date:~4,2%_%date:~7,2%
echo Backing up DC1:
:: start a new backup session, the /M switch is for the type of bakcup being performed, type ntbackup /? for more info
start /wait ntbackup backup \\DC1\c$ /j "DC1 Backup" /f "C:\BAK\DC1\DC1_%mydate%.bkf" /M incremental
echo DC1 is Done
echo Backing up EXCH:
start /wait ntbackup backup \\EXCH\c$ /j "EXCH Backup" /f "C:\BAK\EXCH\EXCH_%mydate%.bkf" /M incremental
echo EXCH is Done
echo Backing up FS1:
start /wait ntbackup backup \\FS1\c$ /j "FS1 Backup" /f "C:\BAK\FS1\FS1_%mydate%.bkf" /M incremental
echo FS1 is Done
echo Backup was completed %date% %time%
pause
这是一个完整的交互式解决方案。但真正的力量在于行set mydate
。能够分割字符串是 DOS 中一门被遗忘的艺术;
set mydate=%date:~10,4%_%date:~4,2%_%date:~7,2%
我获取 date 的命令输出,然后将其剪切,并输出一些可以用作文件名的内容。这样每天都会创建一个新文件,您就可以拥有一个“真正的”备份系统。
只需编辑服务器名称 DC1、FS1、EXCH 并输入您自己的名称,或者只需使用驱动器路径。
答案2
我很久没有使用过 Windows 了,但是:
copy "source dir\foo.mdb" "target dir"
您可能需要查阅有关要用于复制的开关的在线帮助。
答案3
您可能想使用 robocopy 或 xcopy 而不是 copy。它们都更加强大。
可以通过将路径括在引号中来解决空格问题。例如,“%ProgramFiles%\ApplicationName\filename.mdb”就可以了。我将使用的命令是:
xcopy “%ProgramFiles%\ApplicationName\filename.mdb” C:\Backup /H /K /O /Y
答案4
您遇到问题的原因是您需要在任何带空格的文件名或路径周围加上引号。使用 at 命令按计划备份文件。请参阅命令行参考
在这种情况下,如果您希望每天晚上 11 点进行备份,则该行将是:
at 11:00PM /every: M,T,W,Th,F,S,Su cmd/c copy "C:\Program Files\ApplcationName\filename.mdb" d:\backups