如何制作包含选项的bat文件列表

问题描述 投票:0回答:1

我想制作一个bat文件,列出特定目录中的所有文件,并在列出的每个项目的开头添加数字。该数字必须是可选择的选项。

示例: 我有一个文件夹,里面有5个文件,aaa.exe,bbb.exe,ccc.exe,ddd.exe,eee.exe。当我运行bat文件时我需要看到

  1. aaa.exe
  2. bbb.exe
  3. ccc.exe
  4. ddd.exe
  5. eee.exe

所以现在如果我想运行第 5 个 exe,我需要按 5,然后按 Enter 键,第 5 个 exe 将立即启动。

我已经找到了如何使用此代码列出文件夹中的所有项目

REM -start "c:\windows\system32" notepad.exe 
for /r %%i in (*) do echo %%i
pause
exit

但我不知道如何在文本前面添加数字并使这些数字成为可选选项。

编辑---

现在我得到了

错误:不允许重复选择。运行 '""' 不是 被识别为内部或外部命令、可操作程序或 批处理文件。

当我尝试第二次运行这个循环时。

这是我写的代码:

@ECHO OFF
setlocal enabledelayedexpansion


REM ---Prompt part
:choise
SET /P AREYOUSURE=Install programs (Y/[N])?  
IF /I "%AREYOUSURE%" EQU "Y" GOTO :chooseInstall
IF /I "%AREYOUSURE%" EQU "N" GOTO :nope

REM --Cheking for Y or N
GOTO :choise

:nope
echo "Ok. Have a nice daty / night"
pause
exit



:chooseInstall
echo Which program do you want to install?
echo.
echo 1. 7Zip
echo 2. CPU Z
echo.

SET /P AREYOUSURE=Choosing: 
IF /I "%AREYOUSURE%" EQU "1" set "pathToSoft=C:\Users\usr\Desktop\hello"
IF /I "%AREYOUSURE%" EQU "2" set "pathToSoft=C:\Users\usr\Desktop\bye"


echo.
echo.

echo %pathToSoft%

echo.
echo.


REM ---Installs
echo "Which file to install"

cd %pathToSoft%
echo.
echo.



REM --Loops that scan files

set /A counter=0


for /R %%i in (*) do (

if not "%%~nxi" == "%~nx0" (
    set /A counter+=1
    echo !counter!: %%~nxi
    set exe[!counter!]=%%i
    set choice=!choice!!counter!
    )
)

if %counter% LSS 10 (
choice /C %choice% /M "Choose: "
set EXENUM=!ERRORLEVEL!
) else set /P EXENUM="enter exe number: "


set EXECUTABLE=!exe[%EXENUM%]!
echo running %EXECUTABLE%
call "%EXECUTABLE%"

echo.
echo.
echo.





:installmore
SET /P INSTALLMORE=Do you want to install something else (Y/[N])?  
IF /I "%INSTALLMORE%" EQU "Y" GOTO :chooseInstall
IF /I "%INSTALLMORE%" EQU "N" GOTO :nope
windows batch-file
1个回答
2
投票
  • 计算可执行文件并将它们与计数器关联,创建一种“数组”变量(过滤出当前批处理脚本)
  • 同时建立选择列表
  • 循环后,如果选项不超过 9 个,则使用
    choice
    ,否则使用经典交互
    set
  • 检索用户选择并调用可执行文件/批处理文件

(您必须启用延迟扩展才能在循环内使用

%
!
env.var 分隔符和即时求值)

可以这样做:

@echo off

setlocal enabledelayedexpansion

set /A counter=0
set choice=

for /R %%i in (*) do (

if not "%%~nxi" == "%~nx0" (
set /A counter+=1
echo !counter!: %%~nxi
set exe[!counter!]=%%i

set choice=!choice!!counter!
)
)

if %counter% LSS 10 (
choice /C %choice% /M "type exe number"
set EXENUM=!ERRORLEVEL!
) else set /P EXENUM="enter exe number: "


set EXECUTABLE=!exe[%EXENUM%]!
echo running %EXECUTABLE%
call "%EXECUTABLE%"
© www.soinside.com 2019 - 2024. All rights reserved.