复制以下代码到123.txt文件中,并且修改后缀名称为123.bat,存放目录为任意地方
其中主要,我这里域控为abcd,需要修改对应的的域控名称,还有ou也要指定到对应OU的部门
@echo off ::清屏 cls ::返回根目录,并且打开C盘 cd \ c: ::设定一个cmd第一个位置A,以便后期循序使用 :A ::echo. 是打印一行空行 echo. ::通过 if exist 判断是否存在文件,存在删除,不存在跳过按顺序执行下面的语句 if exist user.txt ( del user.txt ) if exist log.txt ( del log.txt ) if exist name.txt ( del name.txt ) echo ------------------------------------------------- echo *******这是一个批量迁移用户到指定OU的脚本******** echo ------------------------------------------------- echo. echo 【1】请输入你需要变更的用户账号,直到输入数字"1"回车,跳转到OU选择。 echo 【2】如果你想批量导入已知账户,把名字复制到C:\name.txt,一行一个账户名字,然后输入数字"2"回车 echo. ::创建一个空的user.txt文件 echo off > user.txt ::设定一个cmd第位置B,以便后期循序跳转使用 :B ::声明一个变量,name 查询变量,以及设定一个变量name_cn 初始值为1, 用来判断用户是否存在 set /p name=变更的用户名: set name_cn=1 ::当屏幕输入数字1,回车直接跳转到对应的位置C,部门选择 if %name%==1 (goto C) if %name%==2 (for /f "delims=" %%i in (name.txt) do (dsquery user -name %%i >> user.txt)) &goto C ::for循环,把查询用户的结果赋值给变量name_cn,这里面delims设定不存在分隔符号(for循环默认分隔符是空格,我们需要取消) ::值得敲黑白的地方:我这边用到的参数是 -samid 是指用户账户,这个是每个用户账户唯一码,不能重复,方便排查重复姓名,以及排错 for /f "delims=" %%i in ('dsquery user -samid %name%') do (set name_cn=%%i ) ::for循环,查询用户名是否已导入到变更文本里面,存在跳转到B,重新输入账户 for /f "delims=" %%i in (user.txt) do (if %name_cn%==%%i (echo 用户已存在,请重新输入。 &echo. &goto B)) ::if 判断,查询用户是否存在AD 域控中,存在需要重新输入,如存在打印查询用户的具体信息,并且存档到user.txt文件中,然后跳转到B位置,进行下一位用户查询 if %name_cn%==1 (echo 域用户名不存在,请重新输入查询。&echo. &goto B) else (dsquery user -name %name% >> user.txt &echo %name_cn% &echo. &goto B) ::设定一个cmd第位置C,以便后期循序使用 :C echo. echo ------------------------------------------------------------ echo ************请输入你要变更到的部门名称********************** echo 部门名字有空格,是需要使用双引号""包起来,建议查询都包起来 echo 如果不知道部门名称,可以输入数字"2"回车,查询组织下所有部门 echo ------------------------------------------------------------ echo. ::设定一个cmd第位置D,以便后期循序使用 :D ::设定变量bumen为手动输入,设定bumen_cn初始值==1% set /p bumen=变更的部门名称: set bumen_cn=1 ::当不知道组织里面具体的名字的时候,可以输入数字2,查看组织里面的部门具体名字,通过复制粘贴来确定变更部门 ::ou=ALL,是指公司一级部门组织,如果没有可以取消,dc=abcd是域控名称,如果默认可以写成dc=XXX,dc=com,XXX为公司域名称 if %bumen%==2 (dsquery ou ou=ALL,dc=abcd,dc=com -o rdn & echo. &goto D) ::通过变量部门查询到的ou全称,赋值给bumen_cn for /f "delims=" %%i in ('dsquery ou -name %bumen%') do (set bumen_cn=%%i) ::通过初始值来判定部门是否存在,如果存在将输出部门具体的OU,然后跳转到位置E if %bumen_cn%==1 (echo 部门不存在,请重新输入。&echo. &goto D) else (echo %bumen_cn% &goto E) :E echo. echo -------------------------------------------------------- echo *********是否要把选择的用户,变更到此部门*************** echo 【1】是的 echo 【2】部门选择错误,重新选择部门 echo 【3】新增人员 echo -------------------------------------------------------- echo. ::设定变量select来确定你的选择% set /p select=请输入您的选择: ::通过if来判断对应的,当选择1的时候,把选择的人员,迁移到指定ou,并且把输出结果导入到c:\log.txt文件中,然后跳转到位置F ::值得一提的是,if里面嵌套了for循环,需要把for循环用括号包起来,然后跳转放置最后,否则执行第一条for循环直接跳转F位置,无法实现批量迁移 if %select%==1 (for /f "delims=" %%i in (user.txt) do (dsmove %%i -newparent %bumen_cn% >> log.txt)) &goto F if %select%==2 (echo. &goto D) if %select%==3 (echo. &goto B) echo "输入错误,请重新输入正确的选项。" &goto E :F echo. echo ------------------------------------------------------------- echo **********变更是否成功,可以通过c:\log.txt查看。************* echo 【1】是否继续移动其他用户,重新开始 echo 【2】提出脚本 echo ------------------------------------------------------------- echo. ::设定变量num,选择是否继续还是退出 set /p num=请输入您的选择: if %num%==1 (goto A) if %num%==2 (goto Z) echo "输入错误,请重新输入正确的选项。" &goto F :Z ::停留在cmd界面,然后按任意键退出 pause echo on