复制以下代码到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