我正在编写一个可以使用Task Scheduler安排的自动备份程序。
我已经完成了这一点,它将成功确保它可以读取/写入源文件夹和目标文件夹,然后将所有内容从源复制到目标,忽略尚未更改的文件。我想做的是"同步"目标文件夹到源文件夹。我尝试将文件名从%destdir%
(输入目标路径的变量)回显到.txt文件中,然后将.txt文件与%sourcedir%
中的文件名进行比较(变量用于输入源路径),删除.txt文件中未列出的任何内容。这是纸上谈兵,但我认为我的语法可能有误,因为我并不完全熟悉if
和for
。这就是目前备份例程的样子:
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%"
。有关这方面的事情看起来并不正确,但我无法完全理解它。我已经做过了。现在已经调试了好一个小时左右,而我似乎无法解决这个问题。
任何帮助都将不胜感激。
答案 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%"