我正在使用 ROBOCOPY 将一些文件从文件夹 A 复制到文件夹 B。我故意使用 NTFS 权限使文件夹 B 无法访问,以抛出错误,以便在复制失败时可以采取不同的操作。但是 ROBOCOPY 似乎没有抛出高于 0 或 1(成功)的错误级别。使用具有管理员级别 CMD 的 Server 2016。
我正在使用的脚本:
@echo on
:: Robocopy's Variables
set source=\\computer1\folder1\
set destination=\\computer2\folder2\
set logfilelocation=C:\scriptfolder\log.txt
set scripts=C:\scriptfolder
robocopy %source% %destination% /E /NFL /NDL /NC /NS /NP /W:1 /R:0 /LOG:%logfilelocation%
if ERRORLEVEL 1 goto success
if ERRORLEVEL 0 goto success
:FAIL
call %scripts%\failed.bat
goto end
:SUCCESS
call %scripts%\success.bat
:END
所以基本上,如果我在 robocopy 行后运行 echo %errorlevel%,它会抛出错误级别 0(成功),而日志显示所有文件的访问都被拒绝。
2018/08/27 10:22:52 ERROR 5 (0x00000005) Accessing Destination Directory \\computer2\folder2\
Access is denied.
我想要一个错误,但却没有给我高于 1 的 ROBOCOPY 错误级别。当文件无法复制时,有什么建议可以让我采取行动吗?
答案1
对于我来说,相同,当使用开关/R:1/W:2时,它也会返回错误级别0 - 如果我不提供任何开关,我需要中断重试,然后我会得到错误级别-1073741510 - 根据下面的链接,这意味着用户刚刚中止了脚本执行。
我想我必须先编写一些测试访问的代码。
答案2
我通过使用 dir 命令检查可访问性来解决此问题:
set srcdir=\\myserver\myshare
dir %srcdir% > nul
if %errorlevel% NEQ 0 set ermsg=Problem accessing %srcdir% & goto reporterr
robocopy %srcdir% %destdir%
:reporterr
rem skipped robocopy and do stuff when dir errors
echo %ermsg%