我想在 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.
您的代码看起来不错,应该可以满足您的要求。但是,我建议做一些小改动以提高其稳健性和可靠性:
添加错误检查: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%
希望对您有所帮助!