【问题标题】:Batch file choice command more than 10 parameter10多个参数的批处理文件选择命令
【发布时间】:2020-12-08 07:12:13
【问题描述】:

我有一个批处理脚本,它找到哪个驱动器承载我的文件夹(磁盘部分情况)和创建文件夹,然后它列出了该文件夹中的文本文件(现在是它的文本)。无论如何,问题是当批处理要求我选择要打开哪个时,它一直工作到 9 点。我什至不能按 10,因为当我按 1 时它会自动打开文本文件。 2位数字怎么写?因为文件夹总是会改变,可能有 30 个选项。这是我的代码;

@for %%a in ( C D E F G H I J K L M N O P Q R S T U V W X Y Z ) do @if exist %%a:\TAM_IMAGES set The_Drive=%%a
@for %%b in ( C D E F G H I J K L M N O P Q R S T U V W X Y Z ) do @if exist %%b:\Users\canoca\Desktop\bosluktesti set testbasarisiz=%%b
REM @dir %The_Drive%:\TAM_IMAGES
REM @dir %testbasarisiz%:\Users\canoca\Desktop\bosluktesti
cd %The_Drive%:\TAM_IMAGES
setlocal enabledelayedexpansion

set count=0
set "choice_options="

for /F "delims=" %%A in ('dir /a:-d  /b "%The_Drive%:\TAM_IMAGES"') do (

   set /a count+=1

   set "options[!count!]=%%A"

   set choice_options=!choice_options!!count!
)

for /L %%A in (1,1,!count!) do (
   echo %%A]- !options[%%A]!
   
)

choice /c:!choice_options!  /m "Yuklemek istediginiz imaji seciniz: "

REM %testbasarisiz%:\Users\canoca\Desktop\test.bat %The_Drive%:\TAM_IMAGES\!options[%ERRORLEVEL%]!


start %The_Drive%:\TAM_IMAGES\!options[%ERRORLEVEL%]!

cmd /k

【问题讨论】:

  • 您必须使用SET /P 接受用户输入。
  • 我可以输入到第 9 个参数,问题是我只能输入 1 个数字。之后它会自动打开文件
  • 查看我的回答 here 了解使用计数和子字符串修改来构建最多 39 个项目的选择菜单的方法

标签: batch-file cmd choice


【解决方案1】:

您可以通过使用两个(或更多)choice 命令来模拟两位数(甚至更多)的条目。缺点:您始终必须输入两个(所有)数字(例如01作为第一选择)。当然,这意味着您必须手动验证结果输入:

@echo off
setlocal enabledelayedexpansion

:input
set count=100
for /f "delims=" %%a in ('dir /b /a-d') do (
  set /a count+=1
  echo !count:~-2!] %%a
)
set /a countMax=count-100
set "countNr=%count:~-2%"
<nul set /p "=input (01...%countNr%, 00 for exit): " 
choice /c 1234567890 /n >nul
set first=%errorlevel:~-1%
<nul set /p "=%first%"
choice /c 1234567890 /n >nul
echo %errorlevel:~-1%
set ch=%first%%errorlevel:~-1%
echo that was %ch%
set /a line=1%ch%-101

REM echo debug: ch=%ch%;CountNr=%countNr%;CountMax=%CountMax%,Line=%line%
if "%ch%" == "00" goto escape
if %ch% gtr %countMax% echo bad input&goto :input

for /f "delims=" %%a in ('dir /b /a-d^|more +%line%') do set "file=%%a"&goto :cont
:cont
echo that was %ch% - %file%
echo doing something with %file%.
goto :eof

:escape
echo you choosed '00' for exit.

我通过两次dir 避免了类似数组的变量,假设文件夹的内容在输入期间不会改变。

【讨论】:

  • 感谢您的好回答,现在我可以写 2 位数字,但有一个问题,我有两个问题。问题是批处理正在创建一个名为“0”的文件,我不希望这样。我的问题是;为什么我们将计数设置为 100 以及我将如何写我选择的文件的名称(我想在最后写:start C:\users\hp\"the file i choose")
  • 0 文件:最愚蠢的错误,无论出于何种原因,我都会不时犯错。已更正。 (抑制输出的是&gt;nul,而不是&gt;0
  • 我们需要两位数字(数字 100 开始,然后只取最后两位数字(比添加零更容易 if
  • the file i choose 在变量%file% 中,所以你的命令是start "" "C:\users\hp\the file i choose"(注意"" - start 将第一个引用的参数作为窗口标题,但我们需要引用C:\users\hp\%file% 以确保它与文件名中的空格一起使用。所以我们给它一个空的“假”参数作为标题(不使用,但对于正确的语法是必需的))
  • 有没有办法使用退格键来删除输入(用于误点击的情况)并使用回车键?
猜你喜欢
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2010-11-20
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
相关资源
最近更新 更多