For loop 批处理-通过For循环将用户添加到多个组
在我的最后一个问题中,我讨论了我是如何编写一个新的大规模用户创建脚本的,现在大约有95行。我收到了这个问题的解决方案,并试图将其实现到代码的不同部分。现在,我正在尝试使用嵌套在主for循环中的for循环将用户从Excel文档添加到多个组中,for循环创建用户,mail启用用户等等 这就是我现在所拥有的:For loop 批处理-通过For循环将用户添加到多个组,for-loop,batch-file,cmd,For Loop,Batch File,Cmd,在我的最后一个问题中,我讨论了我是如何编写一个新的大规模用户创建脚本的,现在大约有95行。我收到了这个问题的解决方案,并试图将其实现到代码的不同部分。现在,我正在尝试使用嵌套在主for循环中的for循环将用户从Excel文档添加到多个组中,for循环创建用户,mail启用用户等等 这就是我现在所拥有的: setlocal enabledelayedexpansion for /f "skip=37 tokens=* delims=," %%a in (Settings.ini) do ( set
setlocal enabledelayedexpansion
for /f "skip=37 tokens=* delims=," %%a in (Settings.ini) do (
set Groups=%%a
)
for /f "skip=1 Tokens=1,2,3 Delims=," %%a in (C:\UserList.csv) do (
set User=%%a
set "GroupsAdd=net group %groups:,= /add !User! && net group %"
!GroupsAdd! /add %%a
)
如您所见,脚本跳过设置文件中的37行,直到到达所需的行,并将groups变量设置为该行。下一个for循环尝试将用户添加到设置文件中定义的指定组中,例如学生、学生代理、12年级等
这就是代码失败的地方,它将我传递到net group的帮助菜单,我尝试过其他方法,例如不使用延迟扩展,并传递了一个错误,说明:
/Add is not recognised as an internal or external command, operable program or batch file.
任何帮助都将不胜感激
TL;DR我需要创建一个函数,将Excel文件中的用户添加到使用net group的设置文件中的指定组中,但是我现在这样做的方式不断失败,我需要帮助。请记住
代码>用于延迟扩展。这意味着用分隔的表达式
s的扩展时间应该晚于用%
s分隔的表达式
在您当前的代码中,有一个代码>-分隔的表达式放在%
-分隔的表达式中。这样,前者就永远没有机会扩张:
%
扩展发生得更早,并且在它发生的特定时间,代码>不应作为特殊符号进行处理和识别。所以,/add!用户!&&net group%
位按字面插入,而不展开!用户代码>
- 稍后,当您展开整个
组sadd
时,其中的代码>不再工作,因为扩展这些代码的时间正是在扩展GroupsAdd
时,而不是之后。换句话说,代码>不是递归展开的
我可以在这里看到两种选择:
把放进去!群沙/将%%a
添加到子例程中,替换使用%
s的code>s和使用%User%
的%a
:
...
for /f "skip=1 Tokens=1,2,3 Delims=," %%a in (C:\UserList.csv) do (
set User=%%a
set "GroupsAdd=net group %groups:,= /add !User! && net group %"
call :GroupsAdd
)
goto :EOF
:GroupsAdd
%GroupsAdd% /add %User%
去掉User
变量,然后在set GroupsAdd
命令中,替换!用户带有%%a的code>以及带有的%%
扩展代码>一:
...
for /f "skip=1 Tokens=1,2,3 Delims=," %%a in (C:\UserList.csv) do (
set "GroupsAdd=net group !groups:,= /add %%a && net group !"
!GroupsAdd! /add %%a
)
GroupsAdd可能是空的。什么是布景“集体悲伤。。。行应该做什么?GroupsAdd不是空的。设置文件中的行包含组,当我将echo设置为off时,它会写入正确的用户组。GroupsAdd应该创建一个命令:net group GROUPNAME/add USERNAME,该命令在组每次更改时都会更改-即,如果我定义了三个组,它会执行三次。您正在尝试使用/add更改GroupsAdd
变量中出现的所有逗号!用户!&&net组
。我可以给你两个理由:1。GroupsAdd
中不会有任何逗号,因为设置它的for
循环的分隔符是逗号。2.它包含&&
,需要对其进行转义,否则它将失败。我假设你不想这样做…?即使不将delim设置为逗号,它仍然不起作用。由于set函数被引号包围,因此&&也应该起作用。请注意,如果脚本不必从Excel文件中读取,则此操作非常有效。ETA:使用逗号作为delimeter,它仍然会将组设置为整个字符串,而不是用逗号分隔。它什么时候从Excel文件中读取?我猜它在以前的代码中的某个地方。我不太确定它是否可以从Excel文件中读取,你以前做过吗?谢谢,第一个选项工作得很好,但是我无法让第二个选项工作。谢谢你的回答。