我有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
答案 0 :(得分:1)
以下示例应在运行时创建菜单:
它的工作原理是在C:\Files
目录中搜索.ps1
文件并设置变量以用于Set /P
和PowerShell
命令。
@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