如果计算机名称包含

时间:2013-06-25 07:54:12

标签: if-statement batch-file contains computer-name

我需要创建一个批处理文件,只有在计算机名称包含某些字符串时才会在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" )

请问正确的命令是什么?

4 个答案:

答案 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"
)

您可以将您的内容放在ifelse块中。

案例不敏感解决方案:

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