正如其他答案所说,您必须需要第三方实用程序来解决此问题。例如,我用我的GetKey.exe和Show.exe辅助程序编写了ReadLine.bat,这是一个模拟SET /P
命令的子程序,即读取字符直到按下Enter键,然后用BackSpace键删除最后一个字符。我们可以修改这样的例程以便为输入变量提供一个初始值:
@echo off
rem Read a variable with an initialized value
rem Antonio Perez Ayala
set Bell=7
set BackSpace=8
set Enter=13
set Space=32
:ReadInitVar var="prompt" ["initial value"]
rem %1 %2 %3
setlocal EnableDelayedExpansion
Show %2
set len=0
if "%~3" equ "" (
set %1=
) else (
Show %3
set "%1=%~3"
for /L %%i in (0,1,80) do if "!%1:~%%i,1!" neq "" set /A len+=1
)
:nextKey
GetKey
set key=%errorlevel%
if %key% geq %Space% (
rem Ascii character: insert it
Show %key%
for /F "delims=" %%a in ('Show %key%') do set "%1=!%1!%%a"
set /A len+=1
) else if %key% equ %BackSpace% (
rem Backspace: delete last character
if defined %1 (
Show %BackSpace% %Space% %BackSpace%
set "%1=!%1:~0,-1!"
set /A len-=1
) else (
rem Empty value
Show %Bell%
)
)
if %key% neq %Enter% goto nextKey
echo/
for /F "delims=" %%a in ("!%1!") do endlocal & set %1=%%a
exit /B
这样,您可以使用此行来解决您的问题:
call :ReadInitVar color="For you the sky is " "Blue"
您可以从以下站点下载 Getkey.exe 和 Show.exe 辅助程序,并查看原始的 ReadLine.bat 子例程:Advanced Batch features via assistant .exe 程序。
还有另一个与上面的 ReadInitVar.bat 类似的子例程,但它使用 ColorShow.exe 辅助程序而不是 Show.exe在不同的颜色字段中显示用户输入。您可以在这里查看:http ://www.dostips.com/forum/viewtopic.php?f=3&t=4198&p=23426#p23426