2016-11-29 6 views
1

特定のディレクトリにあるすべてのファイルを一覧表示するバットファイルを作成し、リストされた各アイテムの先頭に番号を追加したいとします。この番号は選択可能なオプションである必要があります。選択肢のあるファイルリストを作成する方法

例: 5つのファイル、aaa.exe、bbb.exe、ccc.exe、ddd.exe、eee.exeがあるフォルダがあります。私はbatファイルを実行すると、私は、Enterキーを押しますと、その第五exeファイルが開始しますよりも、だから今、私は5を押す必要が5日exeファイルを実行するワナ場合

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

を確認する必要があります。

私はこのコード

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

でフォルダ内のすべてのアイテムを一覧表示する方法を見つけるallredyが、私は、テキストの前に番号を追加し、数字が選択可能にすることを作成する方法を見つけ出すことはできませんオプション。

編集---

は、今私は二度目のこのループを実行しようとしているとき

ERROR: Duplicate choices are not allowed. running '""' is not recognized as an internal or external command, operable program or 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 

答えて

2
  • を構築
  • (現在のバッチスクリプトをフィルタリング)「アレイ」の変数のようなものを作成し、実行ファイルをカウントし、カウンタに関連付けます同時にループの後
  • の選択リスト、これ以上9以下の選択肢場合choice使用し、他の古典的なインタラクティブset
  • はトンを取得使用彼は、ユーザーの選択と(あなたが%! ENVを使用できるようにdelayedexpansionを有効にする必要が

実行ファイル/バッチファイルを呼び出します。 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%" 
+0

は配列を利用するために殴られ...グレート答えを得ました。私はそれについて考え、バッチでそれをどうするかわからないという結論に達しました。クイックメモ: 'choice'はすぐに入力された入力を受け取り、Returnを待つことはありません。 – geisterfurz007

+0

Thanxが割り当てられます。今のところ完璧に動作します! 私はこの行にわずかな変更を加えました: "/ R %% i for(* .exe)do(" .exeを削除してすべてがmagickのように動作し始めます) もう一度ありがとうございました:) – ZzozZ

+0

実際には配列ではありません。角括弧で囲まれた名前です。しかし、この錯覚はほぼ完璧です。 –

関連する問題