我試圖創建一個帶有子選單的選單,其名稱不帶擴展名,來自目錄。然而,我無法將選擇變數設為數字。這段代碼無論如何都不能作業。我還想在選單中每個檔案名的開頭顯示一個數字;事實上,檔案的數字也將是用戶選擇輸入的數字之一。我無法克服這個問題。
@echo off
cd C:UsersMurrayDocumentsConfigFiles
for /f %%A in ('dir /a-d-s-h /b *conf ^| find /v /c "") do set count=%%A
echo 檔案計數=%count%
for %%F in ("C:UsersMurrayDocumentsConfigFiles*.conf") do echo %%~nxF
設定選擇=
設定 /C /N="請選擇:"
如果"%choice%"=="%count%",則轉到 SUBMENU
如果不存在 "C:UsersMurrayDocumentsConfigFiles\%choice%",則轉到NOFILE。
:SUBMENU
Echo You are here
轉到結束
:NOFILE
echo %choice% 無法找到。
goto END
:結束
如果有任何幫助,我們將不勝感激。
uj5u.com熱心網友回復:
Batch的局限性要歸咎于對這個問題的不合格的糾正。 這是我在幾秒鐘內所能想到的最好的方法:
@echo>
@echo off
:一
cls
cd C:UsersMurrayDocumentsConfigFiles
for %%F in ("C:UsersMurrayDocumentsConfigFiles*.conf") do echo %%~nxF
echo.
echo 輸入配置名稱。
set/p "prompt=>"
如果存在 %prompt%.txt 得到 :2
如果存在%prompt% goto :two
cls
echo 未找到檔案
pause >NUL
得到 :一
:二
cls
REM 當檔案被找到時,這段代碼將運行
pause >NUL
set命令不會提示用戶輸入,除非用/p開關指定。為了使你的代碼更加友好,我還建議在代碼的早期提示檔案路徑。
編輯:一些替代解決方案。將choice命令的提示的第9個選項宣布為 "第二頁 "或 "更多 "選項。在一個有幾十或幾百個檔案的目錄中,這對用戶來說確實是個麻煩。另外,你可以給每個與你的準查詢相匹配的檔案分配一個整數,并在螢屏上的每個檔案名前echo它們,然后允許用戶輸入數字來獲得該檔案。這似乎相當有效,如果你想探索其中的一個或兩個備選方案,我可以幫助你(如果你需要的話)。
uj5u.com熱心網友回復:
這里有一個在答案是否定的中吹捧的方法的快速例子。它將在螢屏上列印一個數字,然后是每個匹配的檔案擴展名,所以將允許大量的匹配檔案,(盡管終端用戶可能不得不滾動一個長的串列)。一旦選擇了一個檔案,你的終端用戶就只需輸入其相應的號碼。代碼不應該在輸入請求之外繼續進行,直到串列中的一個數字與之匹配ENTER了。
@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
設定"src=C:UsersMurrayDocumentsConfigFiles"。
設定"ext=.config"。
如果不存在 "%src%*%ext%" Echo No file matches.& GoTo End
對于 /F "Delims==" %G In ('"(Set #) 2> NUL"') 設定 "%%G="。
對于/F "Delims==" %%G In ('%SystemRoot%System32wbemWMIC.exe OS Call /? ^|
%SystemRoot%System32find.exe"=="'/span>) 做設定"HT=%%G"。
對于/F "Tokens=1* Delims=:" %%G In ('Dir /B /A:-D "%src%*%ext%" 2^> NUL ^|
%SystemRoot%System32findstr.exe /E /I /L /N "%ext%"'/span>
) Do Set "#%G=%H" & Echo( %%G.%HT:~-1%%H)
If Not Defined #1 Echo No file matches.& GoTo End
:Opt
回聲(
設定"HT=" & 設定"opt="。
設定/P "opt=輸入你選擇的檔案的編號>"
如果沒有定義opt (GoTo Opt) Else Set "opt=%opt:"=%"
設定# | %SystemRoot%System32findstr.exe /B /L "#%opt%=" 1>NUL || GoTo Opt
SetLocal EnableDelayedExpansion
For %%G In ("!#%opt%!") Do EndLocal & Set "opt=%%~G"
@Rem 你的代碼在下面
Echo(& Echo You Selected %opt%)
@Rem 你的代碼在這里結束
:結束
Setlocal EnableDelayedExpansion & For /F "Tokens=1,2" %%G In ("!CMDCMDLINE!")
) Do Endlocal & If /I "%%~nG" == "cmd" If /I "%%~H" == "/c" Echo(& Echo Press^
任何鍵來退出.&暫停1>NUL
你需要做的就是修改4和5行的變數值,如果有必要的話,以便進行測驗。除此以外,我將不支持修改或添加。一旦你測驗了代碼,你可以在25和29行之間插入你的代碼,替換我留在那里的例子行,以便你測驗。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/315748.html
標籤:
