Windows 备份脚本

问题描述 投票:0回答:1

我想在 Windows 中编写一个脚本来将多个文件夹从源路径备份到目标路径。要备份的文件夹列在 folders.txt 中。我想排除某些文件类型,例如 exclude.txt 中列出的 *.tmp。该脚本应备份包含“我的文档”等空格的文件夹。我还想要一个日志文件来检查是否有任何错误。还应排除隐藏文件和系统文件。

这是我的代码:

@echo off

set SRC_DIR=c:\data
set DST_DIR=d:\

set FOLDERS_FILE=folders.txt
set EXCLUDE_FILE=exclude.txt

set EXCLUDE_OPTS=/xf %EXCLUDE_FILE% /xf *.tmp

set RO_OPTS=/e /z /xo /xn /xd "System Volume Information" /xd "RECYCLE.BIN"

for /f "usebackq delims=" %%i in ("%FOLDERS_FILE%") do (
    echo Backing up "%%i"...
    robocopy "%SRC_DIR%\%%i" "%DST_DIR%" %RO_OPTS% %EXCLUDE_OPTS%
)

echo Backup complete.
backup dos robocopy
1个回答
0
投票

您的代码看起来不错,应该可以满足您的要求。但是,我建议做一些小改动以提高其稳健性和可靠性:

添加错误检查:Robocopy 在备份过程中可能会遇到错误,因此最好在每次备份后检查错误代码。您可以使用 %ERRORLEVEL% 变量来执行此操作。如果 %ERRORLEVEL% 的值大于 8,则表示 Robocopy 遇到错误。您还可以使用 2>>.

将错误输出重定向到日志文件

在文件路径周围使用引号:如果源路径或目标路径包含空格,您的脚本可能无法按预期工作。为避免此问题,请将路径括在引号中。

使用 /np 选项:Robocopy 默认显示进度信息,这会减慢备份过程。您可以使用 /np 选项禁用它。

在日志文件名中添加时间戳:为避免每次运行脚本时都覆盖日志文件,可以在文件名中添加时间戳。

这是更新后的代码:

@echo off

set SRC_DIR="C:\data"
set DST_DIR="D:\"

set FOLDERS_FILE="folders.txt"
set EXCLUDE_FILE="exclude.txt"

set EXCLUDE_OPTS=/xf "%EXCLUDE_FILE%" /xf *.tmp /xa:h /xa:s

set RO_OPTS=/e /z /xo /xn /xd "System Volume Information" /xd "RECYCLE.BIN" /np

set LOG_FILE="backup_%date:~-4,4%%date:~-7,2%%date:~-10,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log"

for /f "usebackq delims=" %%i in (%FOLDERS_FILE%) do (
    echo Backing up "%%i"...
    robocopy "%SRC_DIR%\%%i" "%DST_DIR%" %RO_OPTS% %EXCLUDE_OPTS% 2>> "%LOG_FILE%"
    if %ERRORLEVEL% gtr 8 (
        echo Error encountered during backup. Check log file for details.
        exit /b %ERRORLEVEL%
    )
)

echo Backup complete. Check log file for details: %LOG_FILE%

希望对您有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.