8

こんにちは私はバッチファイルメニューを作りたいのですが、それは「インストールしたいアプリを選択しますか?」と尋ねます。例えば

  1. App1
  2. App2
  3. App3
  4. App4
  5. App5
  6. すべてのアプリ

どのアプリを選択してください:_

たとえば、App2、App3、およびApp5をインストールして、アプリIDの「Selectwhat app:2,3,5」で入力できるようにします。また、ユーザーがオプション6を選択すると、すべてのアプリケーションがインストールされます。

これはbashスクリプトで可能ですが、バッチスクリプトではわかりませんか?

バッチメニューの例はhttp://mintywhite.com/software-reviews/productivity-software/create-multiple-choice-menu-batchfile/です。

4

13 に答える 13

10

答え

これはあなたが望むことをします。ご不明な点がございましたら、お知らせください。スクリプトに記載されている 2 つの手順に従うだけです。

脚本

:: Hide Command and Set Scope
@echo off
setlocal EnableExtensions

:: Customize Window
title My Menu

:: Menu Options
:: Specify as many as you want, but they must be sequential from 1 with no gaps
:: Step 1. List the Application Names
set "App[1]=One"
set "App[2]=Two"
set "App[3]=Three"
set "App[4]=Four"
set "App[5]=Five"
set "App[6]=All Apps"

:: Display the Menu
set "Message="
:Menu
cls
echo.%Message%
echo.
echo.  Menu Title
echo.
set "x=0"
:MenuLoop
set /a "x+=1"
if defined App[%x%] (
    call echo   %x%. %%App[%x%]%%
    goto MenuLoop
)
echo.

:: Prompt User for Choice
:Prompt
set "Input="
set /p "Input=Select what app:"

:: Validate Input [Remove Special Characters]
if not defined Input goto Prompt
set "Input=%Input:"=%"
set "Input=%Input:^=%"
set "Input=%Input:<=%"
set "Input=%Input:>=%"
set "Input=%Input:&=%"
set "Input=%Input:|=%"
set "Input=%Input:(=%"
set "Input=%Input:)=%"
:: Equals are not allowed in variable names
set "Input=%Input:^==%"
call :Validate %Input%

:: Process Input
call :Process %Input%
goto End


:Validate
set "Next=%2"
if not defined App[%1] (
    set "Message=Invalid Input: %1"
    goto Menu
)
if defined Next shift & goto Validate
goto :eof


:Process
set "Next=%2"
call set "App=%%App[%1]%%"

:: Run Installations
:: Specify all of the installations for each app.
:: Step 2. Match on the application names and perform the installation for each
if "%App%" EQU "One" echo Run Install for App One here
if "%App%" EQU "Two" echo Run Install for App Two here
if "%App%" EQU "Three" echo Run Install for App Three here
if "%App%" EQU "Four" echo Run Install for App Four here
if "%App%" EQU "Five" echo Run Install for App Five here
if "%App%" EQU "All Apps" (
    echo Run Install for All Apps here
)

:: Prevent the command from being processed twice if listed twice.
set "App[%1]="
if defined Next shift & goto Process
goto :eof


:End
endlocal
pause >nul
于 2013-01-26T04:06:22.793 に答える
5

ここでchoice.exeを使用できます:http://ss64.com/nt/choice.html

于 2013-01-25T20:42:06.997 に答える
4

set /p 以下の例を使用します。

echo What would you like to install?
echo 1 - App1
echo 2 - App2

set /p whatapp=

if %whatapp%==1 (
    codetoinstallapp1
) else if %whatapp%==2 (
    codetoinstallapp2
) else (
    echo invalid choice
)
于 2013-01-26T03:01:08.343 に答える
3

これが私が学んだトリックです:

echo.1) first choice
echo.2) second choice
echo.3) third choice
echo.4) fourth choice

:: the choice command

set pass=
choice /c 1234 /n /m "Choose a task"
set pass=%errorlevel%

::the choices

if errorlevel 1 set goto=1
if errorlevel 2 set goto=2
if errorlevel 3 set goto=3
if errorlevel 4 set goto=4
goto %goto%

私は 1 ~ 4 しか使用していませんが、可能な選択肢をさらに追加するのは非常に簡単です。

于 2015-03-01T01:40:54.880 に答える
1
@echo off
:menu
cls
echo.
echo Select the case color you want to create:
echo ==========================================
echo.
echo App 1
echo App 2
echo App 3
echo App 4
echo.
echo ==========================================
echo Please answer Y/N to the following:

set /p App1= Install App 1?
set /p App2= Install App 2?
set /p App3= Install App 3?
set /p App4= Install App 4?

if /I "%App1%" EQU "Y" goto :Option-1
if /I "%App1%" EQU "N" goto :1
:1
if /I "%App2%" EQU "Y" goto :Option-2
if /I "%App2%" EQU "N" goto :2
:2
if /I "%App3%" EQU "Y" goto :Option-3
if /I "%App3%" EQU "N" goto :3
:3
if /I "%App4%" EQU "Y" goto :Option-4
if /I "%App4%" EQU "N" goto :End



:Option-1
App 1 Loc.
goto 1
:Option-2
App 2 Loc.
goto 2
:Option-3
App 3 Loc.
goto 2
:Option-4
App 4 Loc.
:End

Exit
于 2015-07-02T19:23:07.853 に答える
0

私が使用しているバッチ スクリプト メニューの例を次に示します。

@echo off
setlocal
:begin
cls
echo [LOCAL ACCOUNTS REMOTE ADMIN] --------------------------------------
echo   1 -- List local accounts on a remote machine
echo   2 -- Create a local account on a remote machine
echo   3 -- Change a local account password on a remote machine
echo   4 -- Delete a local account on a remote machine
echo;
echo   5 -- exit
echo;
set /P rmFunc="Enter a choice: "
echo --------------------------------------------------------------------
for %%I in (1 2 3 4 5 x) do if #%rmFunc%==#%%I goto run%%I
goto begin

:run1
rem list local accounts code
goto begin

:run2
rem create local account code
goto begin

rem and so on, until...

:run5
:run9
:run99
:runx
endlocal
goto :EOF

最も関連性の高いビットは、set /p行とfor...in行です。このfor...in行は基本的に、入力された選択肢とすべてのメニュー項目番号を比較し、一致する場合はgoto run#; それ以外の場合は、最初からやり直してください。

于 2013-01-28T18:55:44.000 に答える
0

バッチ ファイルは、コマンド プロンプト コマンドのリストです。次のコードが端末に出力されます。

echo whateveryouwant

バッチ ファイルでこれらの echo ステートメントを使用してメニューを印刷します。

ユーザー入力の取得は、次の場所にあります: How to read input from console in a batch file?

アプリケーションのインストールはもう少し複雑です。アプリケーションの要件と、ファイルをどこに移動する必要があるかを知る必要があります。これも単純なはずです。move適切な場所の適切なファイルで使用します。

于 2013-01-25T19:47:06.890 に答える
0

上記の回答のいずれも、彼/彼女の質問に完全に答えていないことがわかりました。彼らが省略した機能の 1 つは、インストールするすべてのソフトウェアを一度に選択することです (いわば)。

だから私はこれを私の頭の上から作りました(何か間違っている場合は非常に申し訳ありませんが、あれば編集します)。

@echo off & setlocal enabledelayedexpansion

echo What would you like to install?
::Put your options here, preferably numbered.
set /p op=Type the numbers of the software you want to install (separated by commas with no spaces. E.g: 1,3,2): 

for /f "delims=, tokens=1-5" %%i in ("op") do (
set i=%%i
set j=%%j
set k=%%k
set l=%%l
set m=%%m
)
if %i%X neq X set last=1b & goto %i%
:1b
if %j%X neq X set last=2b & goto %j%
:2b
if %k%X neq X set last=3b & goto %k%
:3b
if %l%X neq X set last=4b & goto %l%
:4b
if %m%X neq X set last=%m% & goto %m%
goto next

:1
::Put the code for doing the first option here
goto %last%
:2
::Put the code for doing the second option here
goto %last%
:3
::Put the code for doing the third option here
goto %last%
:4
::Put the code for doing the fourth option here
goto %last%
:5
::Put the code for doing the fifth option here
goto %last%

:next :: ここにさらにいくつかのものを入れてください...

ということで、ちょっとやり過ぎました。いくつかのことを自由に変更してください。

コードが行っていることは、ユーザー入力 (「1,3,4」を入力した場合など) を取得し、各数値を独自の変数に入力し、その変数が空かどうかをチェックし、空でない場合は送信することです。オプションが何であれ、それを実行するコードに。すべての変数が評価されるまで、これを数回行います。

于 2013-02-09T08:31:49.220 に答える