我需要创建一个批处理文件,只有在计算机名称包含某些字符串时才会在Active Directory中移动计算机名称对象,例如:
If %computername% contains "LAP"
( dsmove "CN=%computername%,CN=Computers,DC=domain,DC=local" -newparent"OU=**Laptops**,OU=Computers,OU=Company,DC=domain,DC=local" )
If %computername% contains "DESK"
(dsmove "CN=%computername%,CN=Computers,DC=domain,DC=local" -newparent "OU=**Desktops**,OU=Computers,OU=Company,DC=domain,DC=local" )
请问正确的命令是什么?
答案 0 :(得分:6)
set check_computername=%computername:LAP=%
if "%check_computername%" EQU "%computername%" (
echo computer name contains "LAP"
) else (
echo computer name does not contain "LAP"
)
您可以将您的内容放在if
和else
块中。
案例不敏感解决方案:
echo %check_computername%| Find /I "LAP" >nul 2>&1 || echo does not contain LAP
echo %check_computername%| Find /I "LAP" >nul 2>&1 && echo does not contain LAP
答案 1 :(得分:1)
@ECHO %COMPUTERNAME% | find /I "LAP"
IF NOTERRORLEVEL 1 ( dsmove ... OU=laptop ... )
GOTO :EOF
@ECHO %COMPUTERNAME% | find /I "DESK"
IF NOTERRORLEVEL 1 ( dsmove ... OU=desktop... )
GOTO :EOF
答案 2 :(得分:0)
逻辑必须颠倒。这是一个不区分大小写的解决方案:
setlocal enabledelayedexpansion
set nameSearch=Lap
set checkComputerName=!computername:%nameSearch%=!
if "%checkComputerName%" NEQ "%computername%" (
echo %nameSearch% found in %computername%
) else (
echo %nameSearch% not found in %computername%
)
答案 3 :(得分:0)
今天遇到这个问题,这就是我解决的方法。
假设您为台式机,笔记本电脑等使用不同的名称,例如(DESKTOP0001,LAPTOP0001)等,那么此方法将很好地工作。
您要做的是抓住名称的前几个字符,您可以在变量中使用:x,y来完成此操作。
示例
echo %compuername:~0,6%
此输出为DESKTO(从位置0开始的前6个字符)
(回显%computername:〜1.6%会给您ESKTOP)
快速证明测试。
if %computername:~0,6% == DESKTO echo yes-Desktop
所以我用
if %computername:~0,6% == DESKTO goto Desktop
if %computername:~0,6% == LAPTOP goto Laptop
goto end
:Desktop
enter Desktop commands here
goto end
:Laptop
enter Laptop commands here
goto end
:end