不同文件夹的批量命令备份

不同文件夹的批量命令备份

我正在尝试每隔 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

如果您不介意根据日期和时间来命名目录(我想在这种情况下您可能不会介意),那么这个批处理文件也许可以工作。此外,这将有助于自动化一点。我之所以要检查游戏是否正在运行,是因为当游戏已经关闭一段时间时,没有任何真正的理由进行备份。

  1. 创建此批处理文件:

    @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
    
  2. 创建任务(有两种方法可以完成此操作):

    1. 通过任务计划程序(如果微软有任何意识的话,您可能会将菜单项翻译成您的母语):
      1. 在开始菜单的搜索栏中输入taskschd.msc,然后按Enter。
      2. 单击左侧栏上的“任务计划程序库”,然后单击右侧栏上的“创建新任务”。
      3. 输入您想要的任务名称。
      4. 单击“触发器”选项卡,然后单击底部的“新建...”。
      5. 在“开始任务”下拉菜单中选择“在创建/修改任务时”。
      6. 在高级选项区域中,勾选“重复任务间隔:”框,并设置以下选项:
        • X 分钟(您可在此选择)
        • 持续时间:无限期
      7. 单击“操作”选项卡,然后单击底部的“新建...”。
      8. 如果尚未选择,请在“操作”下拉菜单中选择“启动程序”。
      9. 在“程序/脚本:”框中,键入%comspec% /t:0C /c "Drive:\Dir\To\YourBatchFile.bat"
      10. 在“条件”选项卡中,确保未选中任何内容。如果选中某些选项,将迅速且完全否定所有这些工作的意义,尤其是当您使用笔记本电脑并且选中“仅当计算机使用交流电源时启动”和“当计算机切换到电池电源时停止”时。
      11. 点击底部的“确定”即可保存任务。
    2. 通过命令行
      1. 在命令提示符中输入此内容并按 Enter 键(将 %DirToBat% 替换为实际目录):
        schtasks /create /tn 您想要命名的任务" /tr "'%comspec%' /t:0C /c \"%DirToBat%\"" /sc 分钟 /mo X
        
        请注意,作为 %comspec% 参数传递的引号必须按所示进行转义。此外,这里的分钟数比 UI 中更易于控制。

需要注意的一点是:批处理文件被设计为在发现游戏未运行时立即停止,并在准备备份任何内容之前进行检查。如果您不想这样做,请删除注释等号标记的部分:%= ============= =%

echo此外,如果您愿意,请随意翻译这些台词。

相关内容