我有個問題。這是我的代碼:
set listPath=1 2
for %%n in (%listPath%) do (
setlocal enabledelayedexpansion
IF "!ver!"=="" (
:loop
echo Insert Version:
set /p "ver="
IF "!ver!"=="" (
echo Invalid!
Timeout /T 1 /NoBreak>nul
goto loop
) ELSE (
goto Next
)
:Next
)
echo ver: !ver!
pause > nul
)
因為它不起作用?每次我執行第一個回圈然后退出 foreach 結束執行。另一方面,如果我省略了 set / p 一切正常,并且可以很好地回圈設定。為什么?如何在不中斷回圈的情況下將該用戶輸入放入回圈中?謝謝
uj5u.com熱心網友回復:
我認為你把事情弄得太復雜了,讓我告訴你我為什么這么說:
該choice命令將強制您僅選擇其中一個選項。除了串列中的內容之外,它不允許任何其他選擇:
@echo off
choice /c 12 /m "Select version"
echo Ver: %errorlevel%
您已經有了%errorlevel%可以用來反映版本的ver變數,但是如果您真的想要,也可以將其分配給您的變數:
@echo off
choice /c 12 /m "Select version"
set "ver=%errorlevel%"
echo Ver: %ver%
除了讓它變得如此簡單之外,您當前的代碼還有很多問題。
- 您的
if和else陳述句格式不正確。運行 fromcmdif /?查看正確的語法。 - 您不能
goto在for回圈括號內的塊內 - 您的標簽位置無效。它在 label 之后看到的第一個命令
)是無效命令。 - 該
for回圈甚至沒有必要和沒有意義的,是誠實的。
但是,如果您仍想使用過于復雜的版本,那么這將是一個更好的版本:
@echo off
set "listPath=1 2"
set ver=
:loop
set /p "ver=Insert Version: "
if not %ver% equ 1 if not %ver% equ 2 (
echo Invalid!
Timeout /T 1 /NoBreak>nul
goto :loop
)
echo ver: %ver%
pause>nul
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/347484.html
標籤:批处理文件
