如何制作bat文件列表,其中包含选项

时间:2016-11-29 09:33:14

标签: windows batch-file

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

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

  
      
  1. aaa.exe
  2.   
  3. bbb.exe
  4.   
  5. ccc.exe
  6.   
  7. ddd.exe
  8.   
  9. eee.exe
  10.   

所以现在如果我wana运行第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 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

1 个答案:

答案 0 :(得分:2)

  • 计算可执行文件并将它们与计数器关联,创建一种"数组"变量(过滤掉当前批处理脚本)
  • 同时构建选择列表
  • 循环后
  • ,如果不超过9个选项,请使用choice,否则使用经典互动set
  • 检索用户选择并调用可执行文件/批处理文件

(你必须启用delayedexpansion才能在循环中使用%! env.var separators& instant evaluation)

可以这样做:

@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%"