如何让 ROBOCOPY 在拒绝访问时抛出错误

如何让 ROBOCOPY 在拒绝访问时抛出错误

我正在使用 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 - 根据下面的链接,这意味着用户刚刚中止了脚本执行。

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/93b658c7-7235-4818-b0e7-23eaf406d089/the-process-exit-code-was-quot1073741510?forum=sqlintegrationservices

我想我必须先编写一些测试访问的代码。

答案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%

相关内容