2013-09-25 195 views
1

这是我创建用户并将其添加到批处理脚本文件中的组的代码。在批处理文件中循环

正如你所看到的,我必须从T-Z永久变得硬编码。是否有任何方法可以读取该行,将第一个分隔符转换为可变分隔符,然后使用该分隔符,然后重新使用该分隔符作为下一个分隔符。我只是想将这段代码切换到for内部的2个dsadd组命令,但得到相同的结果。

%% D只是沿着“Group1#Group2#Group3#Group4”的行可以容纳未知数量的组。

FOR /F "tokens=1-7 delims=#" %%T IN ("%%D") DO (
    IF NOT [%%T] == [] (
    dsadd group cn="%%T",ou="GroupsOU",dc=advserver,dc=local 
    dsmod group cn="%%T",ou="GroupsOU",dc=advserver,dc=local -addmbr cn="%%A %%B",ou="%%C",dc=advserver,dc=local 
) 
    IF NOT [%%U] == [] (
    dsadd group cn="%%U",ou="GroupsOU",dc=advserver,dc=local 
    dsmod group cn="%%U",ou="GroupsOU",dc=advserver,dc=local -addmbr cn="%%A %%B",ou="%%C",dc=advserver,dc=local 
) 
    IF NOT [%%V] == [] (
    dsadd group cn="%%V",ou="GroupsOU",dc=advserver,dc=local 
    dsmod group cn="%%V",ou="GroupsOU",dc=advserver,dc=local -addmbr cn="%%A %%B",ou="%%C",dc=advserver,dc=local 
) 
    IF NOT [%%W] == [] (
    dsadd group cn="%%W",ou="GroupsOU",dc=advserver,dc=local 
    dsmod group cn="%%W",ou="GroupsOU",dc=advserver,dc=local -addmbr cn="%%A %%B",ou="%%C",dc=advserver,dc=local 
) 
    IF NOT [%%X] == [] (
    dsadd group cn="%%X",ou="GroupsOU",dc=advserver,dc=local 
    dsmod group cn="%%X",ou="GroupsOU",dc=advserver,dc=local -addmbr cn="%%A %%B",ou="%%C",dc=advserver,dc=local 
) 
    IF NOT [%%Y] == [] (
    dsadd group cn="%%Y",ou="GroupsOU",dc=advserver,dc=local 
    dsmod group cn="%%Y",ou="GroupsOU",dc=advserver,dc=local -addmbr cn="%%A %%B",ou="%%C",dc=advserver,dc=local 
) 
    IF NOT [%%Z] == [] (
    dsadd group cn="%%Z",ou="GroupsOU",dc=advserver,dc=local 
    dsmod group cn="%%Z",ou="GroupsOU",dc=advserver,dc=local -addmbr cn="%%A %%B",ou="%%C",dc=advserver,dc=local 
) 
) 

回答

3
FOR /F "tokens=1-7 delims=#" %%T IN ("%%D") DO (
    FOR %%S IN (%%T %%U %%V %%W %%X %%Y %%Z) DO (

     dsadd group cn="%%S",ou="GroupsOU",dc=advserver,dc=local 
     dsmod group cn="%%S",ou="GroupsOU",dc=advserver,dc=local -addmbr cn="%%A %%B",ou="%%C",dc=advserver,dc=local 

    ) 
) 

如果%%D包含#这样分隔的单词列表:“组别1#组2#组3#组4”,那么你可能会得到同样的结果与此代码:

set groups=%%D 
FOR %%T IN ("!groups:#=" "!") DO (

    dsadd group cn=%%T,ou="GroupsOU",dc=advserver,dc=local 
    dsmod group cn=%%T,ou="GroupsOU",dc=advserver,dc=local -addmbr cn="%%A %%B",ou="%%C",dc=advserver,dc=local 

) 

前面的代码无论在多少组中都可正常工作%%D

+0

第一个工作正常,完美,但第二个对我不起作用。它在做一个For循环并且不能设置变量时做了。我打开SETLOCAL ENABLEDELAYEDEXPANSION在顶部和变量设置好,但我仍然似乎无法使用它在(%groups:#=%)区域。我需要改变它!或者其他的东西 ? – Xnub

+0

是的,只需用惊叹号改变百分数:'(!groups:#=!)' – Aacini

+0

%% T似乎只能保持#现在。 – Xnub