我正在将用户移动到一个新的域、文件服务器和用户名格式。我试图编写一个简单的DOS批处理来复制数据并设置权限。X:映射到旧服务器,E:是新服务器上的本地驱动器。输入文件只是OldUserName,NewUserName的CSV列表。CSV文件是State.users.csv。(批处理将状态拆分,以便在新服务器上的路径中使用)。
批处理文件:
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甚至从来没有运行过机器拷贝?(所有的icacl都被注释掉了,机器人拷贝工作得很好。)
然而,我在测试过程中输出的行与正确替换的变量相呼应:
(
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可以按预期工作。
我试过单引号,单引号围绕双引号。我在机器人复制命令中添加了引号,它工作得很好(无论是单一的还是双的)。
为了我的理智,我拿出了(CI),然后它在F上完全消失了。
不管有没有EnableDelayedExpansion,我都试过了,没有运气。
我也删除了/F的第一个。同样的结果。
而不是REM,我使用回波,我仍然得到错误"(CI)F是意外的……“!
我复制并粘贴到一个新文件,尝试将其编码为ANSI和UTF-8,查看了所有隐藏字符(在ICACLS和“E:.”之间找到了一个TAB。在第一个问题上,但用空格代替是没有帮助的)。我用的是Notepad++
我将它粘贴到一个新文件中,用UTF-8编码将其保存为文本文件,然后从cmd行重命名为.bat .
我不知道为什么变量扩展对Robocopy很好,但是Icacls却不工作(当它不是REM的时候)。
我在这里错过了什么?
发布于 2015-07-29 12:39:52
我发现我需要将cmd /c添加到icacls命令的开头。
我的批处理文件如下所示:
for /f "tokens=*" %%i in (%1) do (
cmd /c "icacls.exe F:\home\%%i /grant %%i:(oi)(ci)(m)"
)
)这对我来说很好。
发布于 2015-04-22 09:14:06
对副本使用不同的变量集,对于ICACLS使用其他变量集。自从几年前,Robocopy就不是MS了,ICACLS使用了不同的变量--你只需要一个不同的if。您还可以使用power shell包装ICACLS变量,这使一切变得更加容易http://tomandersonpro.net/ntfs-permissions-with-powershell/。
发布于 2016-12-28 08:09:39
使用这个:https://stackoverflow.com/a/6478753
for /f "tokens=*" %%i in (%1) do (
icacls.exe "F:\home\%%i" /grant "%%i:(oi)(ci)(m)"
)
)https://serverfault.com/questions/684511
复制相似问题