batch file中的icaclsvariables

我正在将用户转移到新的域,文件服务器和用户名格式。 我试图写一个简单的DOS批处理复制数据并设置权限。 X:映射到旧服务器,E:是新服务器上的本地驱动器。 input文件只是一个OldUserName,NewUserName的CSV列表。 CSV文件是State.users.csv。 (该批次将新状态的path中的状态分割出来)。

batch file:

SETLOCAL EnableDelayedExpansion FOR /F "delims=. tokens=1" %%a in ("%1") DO SET Site=%%a FOR /F "delims=, tokens=1-2" %%c in (%1) do ( ROBOCOPY X:\Users\%%c E:\%Site%\User\%%d /E /Z ICACLS "E:\%Site%\User\%%d" /grant "Domain Admins":(OI)(CI)F /Inheritance:r ICACLS "E:\%Site%\User\%%d" /grant "SYSTEM":(OI)(CI)F ICACLS "E:\%Site%\User\%%d" /grant "CREATER OWNER":(OI)(CI)F ICACLS "E:\%Site%\User\%%d" /grant "%%d":(OI)(CI)F IF NOT "%2"=="" RENAME X:\Users\%%c ZZZ-%%c ) ENDLOCAL 

运行时,icacls命令将会消失:

 (CI)F was unexpected at this time. ICACLS "E:\Ohio\User\%d" /grant "Domain Admins":(OI)(CI)F /Inheritance:r 

甚至从来没有运行robocopy …? (所有icacls注释掉,robocopy工作正常。)

然而,我在testing过程中所留下的线条回应了适当的variables:

 ( rem ROBOCOPY X:\Users\MDuffy E:\Ohio\User\Steve.Hrsk /E /Z rem ICACLS "E:\Ohio\User\Steve.Hrsk" /grant "Domain Admins":(OI)(CI)F /Inheritance:r rem ICACLS "E:\Ohio\User\Steve.Hrsk" /grant "SYSTEM":(OI)(CI)F rem ICACLS "E:\Ohio\User\Steve.Hrsk" /grant "CREATER OWNER":(OI)(CI)F rem ICACLS "E:\Ohio\User\Steve.Hrsk" /grant "Steve.Hrsk":(OI)(CI)F IF NOT "" == "" RENAME X:\Users\MDuffy ZZZ-MDuffy ) 

我可以在命令提示符处复制和粘贴这些行(当然不包括REM),icacls按预期工作。

我试过双引号,双引号。 我已经向robocopy命令添加了引号,它可以很好地工作(单或双)。

为了我的理智,我把(CI)拿出来,然后在F上全死了。

我已经尝试过,没有EnableDelayedExpansion,没有运气。

我也删除了第一个FOR / F。 相同的结果。

我使用了ECHO,而不是REM,我仍然得到错误“(CI)F是意想不到的…”!

我已经复制并粘贴到一个新的文件,尝试编码为ANSI和UTF-8,查看所有隐藏字符(ICACLS和“E:”之间find一个选项卡,但replace一个空间didn没有帮助)。 [我正在使用Notepad ++]

我把它粘贴到一个新的文件中,将其保存为UTF-8编码的文本文件,然后将其重命名为.bat(从cmd行)。

我不知道为什么variables扩展适用于Robocopy,但不是Icacls(当它不是REM)。

我在这里错过了什么?

我发现我需要将cmd /c添加到icacls命令的开头。

我的batch file如下所示:

 for /f "tokens=*" %%i in (%1) do ( cmd /c "icacls.exe F:\home\%%i /grant %%i:(oi)(ci)(m)" ) ) 

这对我来说很好。

为ICACLS使用一组不同的variables和其他variables。 Robocopy从几年前就不是MS,而ICACLS使用不同的variables – 你只需要一个不同的variables。 你也可以使用power shell来包装ICACLSvariables,这使得所有的事情都变得简单一些http://tomandersonpro.net/ntfs-permissions-with-powershell/

使用这个: https : //stackoverflow.com/a/6478753

 for /f "tokens=*" %%i in (%1) do ( icacls.exe "F:\home\%%i" /grant "%%i:(oi)(ci)(m)" ) )