2014-11-24 75 views
0

所以,我下面的批處理腳本:平等變量 - 批

@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問題中。但是每次我運行這個腳本,它都會到ECHO PROBLEM,即使9000/920/310在%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 ......

+0

而不是使用'GOTO',嘗試嵌套'IF ...(...)ELSE(...)'方法。並學習[變量編輯/替換](http://ss64.com/nt/syntax-replace.html) – JosefZ 2014-11-24 12:27:08

+0

事實上這適用於我。排除你的子程序不以'exit/b'結尾的事實或者「goto:eof」。 – npocmaka 2014-11-24 12:32:30

+0

@JosefZ我的目標不是「編輯/替換」一個變量。我不明白我怎麼可以用'IF ...(...)ELSE(...)'而不是'GOTO'。 @npocmaka這只是我試圖使用的腳本的一部分。所以我使用「暫停」來測試它是否有效。 – Prixeler 2014-11-24 15:06:28

回答

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 S,存在與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 
+0

仍然存在相同的問題(請參閱編輯):/ – Prixeler 2014-11-24 17:23:56

+0

編輯出現錯誤:嵌套應遵循下一個模式(外部項目應對應):'A B C ... C B A'。你的模式是'A B C ... A B C'(實例化:'9000 930 310 ... 9000 930 310')。另見我的編輯,介意所有'GOTO:commonEnd' ... – JosefZ 2014-11-24 17:52:52