2013-09-25 228 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