如何使bat文件列表中的选项select

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

例如:我有一个包含5个文件的文件夹,aaa.exe,bbb.exe,ccc.exe,ddd.exe,eee.exe。 当我运行蝙蝠文件,我需要看到

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

所以,现在如果我wana运行5个exe文件,我需要按5,然后按下input,第5个exe现在将启动。

我allredyfind如何使用此代码列出文件夹中的所有项目

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

但我不知道如何在文本前添加数字,并使该数字是一个可select的选项。

编辑 – –

现在即时通讯

错误:不允许重复的select。 运行'“”'不被识别为内部或外部命令,可操作程序或batch file

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

这是我写的代码:

 @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 Wich program do you wana 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 "Wich 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 wana install somthing else (Y/[N])? IF /I "%INSTALLMORE%" EQU "Y" GOTO :chooseInstall IF /I "%INSTALLMORE%" EQU "N" GOTO :nope 

  • 计算可执行文件并将它们与计数器相关联,创建一些“数组”变量(过滤掉当前的批处理脚本)
  • 同时建立选择列表
  • 在循环之后,如果不超过9个选择则使用选择,否则使用经典的交互式set
  • 检索用户选择并调用可执行文件/批处理文件

(你必须启用delayedexpansion才能在循环中使用%! 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%"