等变量 - 批量

时间:2014-11-24 12:10:30

标签: windows variables batch-file cmd findstr

所以,我有以下批处理脚本:

@echo off
 set /p name= 
 rem a random number, don't care about it.
 set complete_name=%name%.Creepy
 Goto STEP1
:STEP1
 echo %complete_name%|findstr /C:"9000" >nul 2>&1
 if not errorlevel 1 (
 goto 9000
 ) else ( 
 GOTO CHECK2
 )
 :CHECK2
 echo %complete_name%|findstr /C:"930" >nul 2>&1
 if not errorlevel 1 (
 goto 930
 ) else ( 
 GOTO CHECK3
 )
 :CHECK3
 echo %complete_name%|findstr /C:"310" >nul 2>&1
 if not errorlevel 1 (
 goto 310
 ) else ( 
 ECHO PROBLEM
 ) 
 :9000 
 ECHO 9000
 PAUSE
 :930
 ECHO 930
 PAUSE
 :310
 ECHO 310
 PAUSE

我想要检查是否" 9000"是否在变量中,对于" 930"和" 310"。如果这些数字都不在变量Echo问题中。但每次运行此脚本时,即使9000/920/310在ECHO PROBLEM,也会转到%complete_name%。那么,这是检查变量是否在另一个变量中的正确方法,还是有更简单的方法呢?

所以我尝试了这段代码:

@echo off
set name=310
set complete_name=%name%.Creepy
Goto STEP1
:STEP1
 setlocal
    if "%complete_name:9000=%"=="%complete_name%" (
      if "%complete_name:930=%"=="%complete_name%" (
        if "%complete_name:310=%"=="%complete_name%" (
        echo PROBLEM
        ) else ( 
        goto 9000
        ) 
      ) else ( 
      goto 930
      ) 
    ) else ( 
    goto 310
    )
    goto :eof

但是我被困在echo problem ......

1 个答案:

答案 0 :(得分:0)

保存下一个代码段,可能名为blabla.bat

@Echo OFF
setlocal
set complete_name=%1
if "%complete_name:9000=%"=="%complete_name%" ( 
  if "%complete_name:930=%"=="%complete_name%" ( 
    if "%complete_name:310=%"=="%complete_name%" ( 
      echo problem 
    ) else ( 
      echo valid 310
    ) 
  ) else ( 
    echo valid 930
  ) 
) else ( 
  echo valid 9000
)
Exit /B

并观看

的输出
blabla x9000y
blabla x930y
blabla x310y
blabla x9a0b0c0y

这是1.嵌套IF ... ( ... ) ELSE ( ... )和2.使用"编辑/替换"变量

或者,如果GOTO被认为是必要的,那么类似于For循环(也是一个好的思想主题......)。

@Echo OFF
setlocal EnableDelayedExpansion
set complete_name=%1
for %%G in (9000 930 310) DO (
  if /I "!complete_name:%%G=!" neq "%complete_name%" GOTO :%%G
)
echo problem %complete_name%
GOTO :commonEnd
:9000
  Echo valid 9000 %complete_name%
  GOTO :commonEnd
:930
  Echo valid 930 %complete_name%
  GOTO :commonEnd
:310
  Echo valid 310 %complete_name%
  GOTO :commonEnd
:commonEnd