Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何使bat文件列表具有可选择的选项_Windows_Batch File - Fatal编程技术网

Windows 如何使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

我想制作一个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 -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
    • 检索用户选择并调用可执行/批处理文件
    (必须启用delayedexpansion才能在循环中使用
    %
    环境变量分隔符和即时求值)

    可以这样做:

    @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个文件,它会给我错误:不允许重复选择。