Windows 如何使bat文件列表具有可选择的选项
我想制作一个bat文件,列出特定目录中的所有文件,并在列出的每个项目的开头添加数字。这个数字需要是一个可选择的选项 例如: 我有一个文件夹,里面有5个文件,aaa.exe,bbb.exe,ccc.exe,ddd.exe,eee.exe。当我运行bat文件时,我需要查看Windows 如何使bat文件列表具有可选择的选项,windows,batch-file,Windows,Batch File,我想制作一个bat文件,列出特定目录中的所有文件,并在列出的每个项目的开头添加数字。这个数字需要是一个可选择的选项 例如: 我有一个文件夹,里面有5个文件,aaa.exe,bbb.exe,ccc.exe,ddd.exe,eee.exe。当我运行bat文件时,我需要查看 aaa.exe bbb.exe ccc.exe ddd.exe eee.exe 所以现在,如果我想运行第5个exe,我需要按5,然后按enter,第5个exe现在将启动 我找到了如何使用此代码列出文件夹中的所有项目 REM -st
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
- 对可执行文件进行计数并将其与计数器关联,创建一种“数组”变量(过滤掉当前批处理脚本)
- 同时构建选择列表
- 循环结束后,如果选择不超过9个,则使用
,否则使用经典的交互式choice
set
- 检索用户选择并调用可执行/批处理文件
%
和!
环境变量分隔符和即时求值)
可以这样做:
@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%"
被打败了。。。很好地解决了如何使用数组的问题。我想了想,得出的结论是我不知道如何批量完成。。。快速提示:
choice
会立即将输入作为输入,不会等待返回。Thanx allot。现在,它的工作完美!我在这行中做了一点小小的修改:“对于(*.exe)中的/R%%I,do(“我删除了.exe,一切又开始像magick.Thanx一样工作了。祝您愉快:)实际上它不是一个数组。这只是一个用方括号括起来的名字。但是这种错觉几乎是完美的。好的,编辑以删除.exe
扩展名,这样您就可以调用.com
文件。顺便说一句,如果您想在运行.bat
可执行文件时留在脚本中,可能需要使用call
前缀。我发现一个问题。它从1计数到9,但如果有第10个文件,它会给我错误:不允许重复选择。