如何使用批处理文件同步/镜像两个文件夹?

时间:2014-05-20 03:54:28

标签: batch-file

我正在编写一个可以使用Task Scheduler安排的自动备份程序。 我已经完成了这一点,它将成功确保它可以读取/写入源文件夹和目标文件夹,然后将所有内容从源复制到目标,忽略尚未更改的文件。我想做的是"同步"目标文件夹到源文件夹。我尝试将文件名从%destdir%(输入目标路径的变量)回显到.txt文件中,然后将.txt文件与%sourcedir%中的文件名进行比较(变量用于输入源路径),删除.txt文件中未列出的任何内容。这是纸上谈兵,但我认为我的语法可能有误,因为我并不完全熟悉iffor。这就是目前备份例程的样子:

echo Copying files...
xcopy /s/e /y /h /k /z /d /i %sourcedir% %destdir%
for /r "%destdir%" %%F in (*.*) do echo %%F>> list.txt
for /F "tokens=2* delims=\" %%I in (list.txt) do if not exist "%sourcedir%" del "%destdir%"
del list.txt
pause
if %errorlevel%==0 goto success
if %errorlevel%==gtr 0 goto failure

我必须在这里做错事(我的猜测是for /F "tokens=2* delims=\" %%I in (list.txt) do if not exist "%sourcedir%" del "%destdir%"。有关这方面的事情看起来并不正确,但我无法完全理解它。我已经做过了。现在已经调试了好一个小时左右,而我似乎无法解决这个问题。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

ECHO Copying files...

SET "SOURCEDIR=Dir to copy"
SET "DESTDIR=Dir where the files shoud be"

XCOPY /s/e /y /h /k /z /d /i "%SOURCEDIR%" "%DESTDIR%"
FOR /R "%DESTDIR%" %%F IN (*.*) DO ( ECHO %%F>> list.txt
FOR /F "tokens=2* delims=\" %%I in (list.txt) DO IF NOT EXIST "%SOURCEDIR%" DEL "%DESTDIR%"
DEL list.txt

IF "%errorlevel%" EQU "0" ( goto :SUCCESS )
IF "%errorlevel%" GTR "0" ( goto :FAILURE )

:SUCCESS
<<command you want to use here.>>
GOTO :END

:FAILURE
<<command you want to use here.>>
GOTO :END

:END
EXIT /B "%ERRORLEVE%"