我正在尝试每隔 x 分钟为刺客信条 3 保存游戏创建一个备份,但文件夹及其文件每次都会被覆盖,请给我一个代码,以便每个备份都位于不同的文件夹中。抱歉我的英语不好。
cls
@echo off
color 0C
echo.
echo Start Backup
echo.
pause
:start
cls
echo.
echo Backup started
echo.
xcopy "source" "destination" /s /y /e
timeout /t 5
goto start
答案1
您可以使用time
创建目录名称:
set butime=%time:~0,2%%time:~3,2%%time:~6,2%
mkdir %butime%
答案2
如果您不介意根据日期和时间来命名目录(我想在这种情况下您可能不会介意),那么这个批处理文件也许可以工作。此外,这将有助于自动化一点。我之所以要检查游戏是否正在运行,是因为当游戏已经关闭一段时间时,没有任何真正的理由进行备份。
创建此批处理文件:
@echo off setlocal enabledelayedexpansion enableextensions cls rem Color is taken care of in the task call. %= ============================================================== =% rem * Take this section out if you want it to make backups even when rem * you're not playing the game. echo Checking if game is running... md "%tmp%\cmdtmp" set tmpdir=%tmp%\cmdtmp tasklist /fo csv /nh /fi "imagename eq %NameOfACExectuable%" /fi "status eq running" > "%tmpdir%\tmp.txt" set /p tasklist= < "%tmpdir%\tmp.txt" del "%tmpdir%\tmp.txt" rd "%tmpdir%" /s /q set tasklist= set tmpdir= %= ============================================================== =% set image= for /f "tokens=1 delims=," %%I in (!tasklist!) do ( set tmpvar=%%~I for %%J in (!tmpvar!) do if not defined image set image=%%~xJ rem * The file extension needs checked so image doesn't become rem * set with output saying that no files have been found. rem * This section has to be a bit complicated because there rem * isn't any straightforward way to get an extension out of rem * an environment variable. ) if not defined image goto :eof echo. echo Backup has now started. rem * This is to ensure that the date/time format is consistent rem * (we likely don't use the same date/time format). set X= for /f "skip=1 delims=" %%x in ('wmic os get localdatetime') do if not defined X set X=%%x set datetime=!X:~0,4!!X:~4,2!!X:~6,2!_!X:~8,2!!X:~10,2!!X:~12,2! set bkupdir="%WhereverYouWantToMakeTheBackup%" md "%bkupdir%\savebackup_!datetime!" set thisbkupdir="%bkupdir%\savebackup_!datetime!" xcopy "%WhereYourACGameSaveIs%" "!thisbkupdir!" /e /y /c /q echo. echo Backup completed. Exiting... timeout /t 5 /nobreak exit
创建任务(有两种方法可以完成此操作):
- 通过任务计划程序(如果微软有任何意识的话,您可能会将菜单项翻译成您的母语):
- 在开始菜单的搜索栏中输入taskschd.msc,然后按Enter。
- 单击左侧栏上的“任务计划程序库”,然后单击右侧栏上的“创建新任务”。
- 输入您想要的任务名称。
- 单击“触发器”选项卡,然后单击底部的“新建...”。
- 在“开始任务”下拉菜单中选择“在创建/修改任务时”。
- 在高级选项区域中,勾选“重复任务间隔:”框,并设置以下选项:
- X 分钟(您可在此选择)
- 持续时间:无限期
- 单击“操作”选项卡,然后单击底部的“新建...”。
- 如果尚未选择,请在“操作”下拉菜单中选择“启动程序”。
- 在“程序/脚本:”框中,键入
%comspec% /t:0C /c "Drive:\Dir\To\YourBatchFile.bat"
。 - 在“条件”选项卡中,确保未选中任何内容。如果选中某些选项,将迅速且完全否定所有这些工作的意义,尤其是当您使用笔记本电脑并且选中“仅当计算机使用交流电源时启动”和“当计算机切换到电池电源时停止”时。
- 点击底部的“确定”即可保存任务。
- 通过命令行
- 在命令提示符中输入此内容并按 Enter 键(将 %DirToBat% 替换为实际目录):
schtasks /create /tn 您想要命名的任务" /tr "'%comspec%' /t:0C /c \"%DirToBat%\"" /sc 分钟 /mo X
请注意,作为 %comspec% 参数传递的引号必须按所示进行转义。此外,这里的分钟数比 UI 中更易于控制。
- 在命令提示符中输入此内容并按 Enter 键(将 %DirToBat% 替换为实际目录):
- 通过任务计划程序(如果微软有任何意识的话,您可能会将菜单项翻译成您的母语):
需要注意的一点是:批处理文件被设计为在发现游戏未运行时立即停止,并在准备备份任何内容之前进行检查。如果您不想这样做,请删除注释等号标记的部分:%= ============= =%
echo
此外,如果您愿意,请随意翻译这些台词。