2016-06-10 221 views
1

我有三個不同的標籤,但它與我選擇的標籤無關:它總是會到第一個標籤(= cmd也打開,如果我正在寫入「google 「)!什麼是錯誤,爲什麼會發生?批處理:goto語句無法正常工作

@echo off 
:start 
set /p input = What do you want to open? 
if "%input%" == "cmd" goto cmd 
if "%input%" == "notepad" goto notepad 
if "%input%" == "google" goto google 

:cmd 
start 
goto start 

:notepad 
start notepad 
goto start 

:google 
start https://www.google.at/ 
goto start 

回答

-1

您的設置/ p不像您認爲的那樣工作。輸入結束爲空,它通過所有if語句並進入:cmd塊。

4

你的第一個問題是,在這條線

set /p input = What do you want to open? 

這行創建了一個與後一個空間稱爲"input "變量,這比你正在測試的"input"變量不同。與其他編程語言不同,您不能添加空格來美化代碼。行更改爲

set /p "input=What do you want to open? " 

你的第二個問題是,經過三個if語句失敗(因爲測試錯誤的變量),CMD只是執行它看到的下一行,這是:cmd標籤。爲避免這種情況,您需要在三條if語句之後添加一個默認標籤,用於變量不匹配時。

if "%input%" == "cmd" goto cmd 
if "%input%" == "notepad" goto notepad 
if "%input%" == "google" goto google 
goto default 

:cmd 
start 
goto start 

如果你只是希望腳本到此爲止,不希望創建一個:default塊,你可以將其更改爲goto :eof,這是腳本的最後一個特殊的標籤。或者甚至更好,使用exit /B 1立即終止腳本,錯誤代碼爲1(其他腳本可以使用%errorlevel%查詢)

+0

非常感謝! –