如何使用批处理脚本获取用户输入

时间:2018-01-11 14:21:36

标签: batch-file

我有16个不同的PowerShell脚本来安装应用程序。如何创建单个批处理文件以询问用户输入以选择要运行的powershell脚本?

示例:

我只想安装一个应用程序,因此批处理脚本会要求输入,我将输入visualstudio。然后,它将运行相应的powershell脚本来安装Visual Studio。

SetLocal
    @echo on   
    :menu   

CHOICE /C VCNE /M "[V]isualStudio, [N]otePad, [c]hrome, [E]xit" 
    set answer=%CHOICE%
    if /i "%answer:~,1%" EQU "V" goto visualstudio
    if /i "%answer:~,1%" EQU "C" goto chrome
    if /i "%answer:~,1%" EQU "N" goto notepad
    if /i "%answer:~,1%" EQU "E" goto Exit


    :chrome
    C:
    cd\
    cd PowerShell
    powershell -file Chrome.ps1
    goto Menu

    :visualstudio
    C:
    cd\
    cd PowerShell
    powershell -file visualstudio.ps1
    goto Menu

    :notepad
    C:
    cd\
    cd PowerShell
    powershell -file visualstudio.ps1
    goto Menu

    :Exit
    exit

2 个答案:

答案 0 :(得分:1)

以下示例应在运行时创建菜单:

它的工作原理是在C:\Files目录中搜索.ps1文件并设置变量以用于Set /PPowerShell命令。

@Echo Off
CD /D "C:\Files" 2>Nul || Exit /B
If Not Exist *.ps1 Exit /B
SetLocal EnableDelayedExpansion

:Menu
ClS
For /F "Delims==" %%A In ('"Set MO[ 2>Nul"') Do Set "%%A="
Set "i=0"
For %%A In (*.ps1) Do (Set /A i+=1
    Set "MO[!i!]=%%A"
    Echo !i!. %%~nA)

:Retry
Set "MO[S]="
Set /P "MO[S]=Select an item number or press Enter to quit " || Exit /B
If Not Defined MO[%MO[S]%] GoTo Retry
Echo=PowerShell -ExecutionPolicy Bypass -File "!MO[%MO[S]%]!"
Pause
GoTo Menu

注意:
上面的例子只会显示预期的命令。如果您对输出感到满意,请删除倒数第二行并从其上方的行中删除Echo=以实际运行所选的powershell脚本。

显然,您的脚本名称足够清晰,以便最终用户清楚他们所选择的内容。

您可以修改:
目标目录,在线2(当前C:\Files
可执行文件扩展名,在3行& 10(当前.ps1)左选择提示消息,在线16(当前Select an item number
在线{{1}上运行的命令}(目前18

答案 1 :(得分:1)

@echo off
CD /D "C:\Files" 
setlocal enabledelayedexpansion
powershell Set-ExecutionPolicy Unrestricted -force
powershell Set-ExecutionPolicy RemoteSigned
:List
CLS
set /A count=0
set choice=
for /R %%i in (*.ps1) do (
if not "%%~nxi" == "%~nx0" (
set /A count+=1
echo !count!: %%~nxi
set exe[!count!]=%%i
set choice=!choice!!count!
)
)
set /P EXENUM="Enter service number to INSTALL: "
set EXECUTABLE=!exe[%EXENUM%]!
echo running %EXECUTABLE%
pause
PowerShell -File "%EXECUTABLE%"
Pause
GoTo List