ディレクトリ内のすべての *.pem ファイルを表示するバッチ ファイルがあり、ユーザーに 1 つを選択するオプションを提供します。現時点では、ECHO に選択した番号を使用して選択したファイルをユーザーに表示しようとしています。配列の内容。インデックス変数 "selectedPem" は、IF ステートメント内にあるため、% を使用しており、遅延展開を使用していないため、配列のインデックス ブラケットで展開されていません。これは、配列のインデックスでは機能しないようです。ブラケット。これは、IFステートメントの前に「selectedPem」変数を設定すると、正しくECHOされるためだと思います。これが機能するための唯一のオプションは、何らかの形でサブルーチンを利用することだと思います。selectedPem 変数が IF ステートメント内で機能しないのはなぜですか?
@echo off
setlocal enabledelayedexpansion
set dir=%~dp0
cd %dir%
ECHO Performing initial search of private and public keys...
set pemI=0
set keyI=0
for %%p in (*.pem) do (
REM echo %%~nxp
set pems[%pemI%]=%%~nxp
REM echo !pems[%pemI%]!
set /a pemI=%pemI%+1
)
REM echo %pems[0]%
set /a totalPems=%pemI%-1
REM This is the test selectedPem variable that showed me the variable works
REM if I set it outside
REM of the "if defined pems[0]" statement
REM set selectedPem=
if defined pems[0] (
echo PEM Files Found:
for /l %%p in (0,1,%totalPems%) do (
echo %%p^) !pems[%%p]!
)
ECHO Select a pem file to be used as your private key. Otherwise, press
Q to not select one.
set /P selectedPem=Enter a number or Q:
IF "!selectedPem!"=="q" (
ECHO Skipping private key selection.
) ELSE (
ECHO !selectedPem!
ECHO %pems[0]%
REM The below ECHO only works when the above selectedPem is set
REM outside of the "IF defined" statement
ECHO !pems[%selectedPem%]!
REM Tried these other implementations:
REM ECHO !pems[!!selectedPem!!]!
REM ECHO %pems[!selectedPem!]%
REM setlocal disabledelayedexpansion
REM ECHO %pems[%%selectedPem%%]%
set privatekey=!pems[%selectedPem%]!
ECHO You chose %privatekey%
)
)`
出力:
Performing initial search of private and public keys...
PEM Files Found:
0) brandon.pem
Select a pem file to be used as your private key. Otherwise, press Q to not
select one.
Enter a number or Q:0
0
brandon.pem
ECHO is off.
You chose
「ECHOがオフになっている」ということは理解しています。配列変数参照を空として解釈しているため、代わりに出力されます。私のスクリプトを読んでくれてありがとう。