2014-11-06 17 views
1

我試圖創建一個批處理文件,詢問用戶有多個(四個)選項的問題。用戶選擇的選項應該觸發批處理文件忽略四個選項之一。假設我通常想要運行的命令是ECHO「A」,ECHO「B」,ECHO「C」,ECHO「D」。 如果此人將A放入,我希望他們仍然可以運行除ECHO「A」之外的所有其他命令。在提示選擇的批處理文件中,答案應該觸發腳本忽略一個選項

目前的解決方案,我想出瞭如下

@echo off 
set /p choice="Do you want not to do: A, B, C or D? [A/B/C/D] " [A/B/C/D] 
if %choice%==A (
    ECHO "B" 
    ECHO "C" 
    ECHO "D" 
    EXIT /b 
) else if %choice%==B (
    ECHO "A" 
    ECHO "C" 
    ECHO "D" 
    EXIT /b 
) else if %choice%==C (
    ECHO "A" 
    ECHO "B" 
    ECHO "D" 
    EXIT /b 
) else if %choice%==D ( 
    ECHO "A" 
    ECHO "B" 
    ECHO "C" 
    EXIT /b 
) ELSE ( 
    ECHO Please select A, B, C or D! 
    EXIT /b 
) 

但是你可以想像,我使用的回聲命令作爲一個例子/抽象。實際的命令更長。在A,B,C和D下定義命令一次,然後根據用戶的選擇告訴批處理文件不要執行A,B,C或D似乎更有效。

也許是因爲我今天早些時候開始工作,但我現在想不到更簡單的方法來做到這一點。所以我希望聽到你的想法,以便如何減少這個批處理腳本的堵塞。

回答

1

事情是這樣的:

@echo off 
setlocal enabledelayedexpansion 
set "$Command=A B C D" 
set /p "$choice=Do you want not to do: A, B, C or D? " 
set "$Command=!$Command:%$choice%=!" 
for %%a in (!$command!) do echo %%a 
+0

有點難以理解,比我的代碼,但非常好,緊湊!有一個問題,爲什麼使用$符號?我已經發現批處理已經足夠用代碼讀取了,比如'set AdrBase =%AdrBase:「=%'(替換掉沒有的符號),爲什麼要增加美元符號更難?) – user1261104 2014-11-06 16:24:18

+0

這只是我的方式設置變量。 – SachaDee 2014-11-06 17:12:19

+0

不錯,緊湊,正是我所期待的。我將盡力在我正在編寫的實際腳本中正確實施它。 – 2014-11-06 21:04:00

0

這應該做的伎倆。

一個「CALL」之後,一批「跳回」,並會做下一步:

@echo off 
set /p choice="Do you want not to do: A, B, C or D? [A/B/C/D] " [A/B/C/D] 
if %choice%==A (
    CALL :B 
    CALL :C 
    CALL :D 
    EXIT /b 
) else if %choice%==B (
    CALL :A 
    CALL :C 
    CALL :D 
    EXIT /b 
) else if %choice%==C (
    CALL :A 
    CALL :B 
    CALL :D 
    EXIT /b 
) else if %choice%==D ( 
    CALL :A 
    CALL :B 
    CALL :C 
    EXIT /b 
) ELSE ( 
    ECHO Please select A, B, C or D! 
    EXIT /b 
) 

:A 
<Function here> 
GOTO :EOF 

:B 
<Function here> 
GOTO :EOF 

:C 
<Function here> 
GOTO :EOF 

:D 
<Function here> 
GOTO :EOF 
2

此代碼中的想法是,它只是跳過您選擇的一個。

@echo off 
set /p choice="Do you want not to do: A, B, C or D? [A/B/C/D] " [A/B/C/D] 
if "%choice%"=="" (
    ECHO Please select A, B, C or D! 
    EXIT /b 
) 
if not %choice%==A (
    ECHO "A" 
) 
if not %choice%==B (
    ECHO "B" 
) 
if not %choice%==C (
    ECHO "C" 
) 
if not %choice%==D (
    ECHO "D" 
) 
exit /b 
+0

我在想這些問題,但不知道如何使用'if not'語句。感謝你的回答! – 2014-11-06 21:03:35

0

這種類型的問題可以使用array輕鬆解決;代碼更清晰,更靈活。我還建議您使用choice命令而不是set /P來實現這種選擇。

@echo off 
setlocal EnableDelayedExpansion 

rem Define all the options/commands 
set option[1]=ECHO "A" 
set option[2]=ECHO "B" 
set option[3]=ECHO "C" 
set option[4]=ECHO "D" 

choice /C ABCD /M "Do you want not to do: A, B, C or D" 

rem Eliminate the not wanted option 
set "option[%errorlevel%]=" 

rem Execute the remaining options 
for /F "tokens=1* delims==" %%a in ('set option[') do %%b 
相關問題