0

如何提示用户给出答案,建议他们可以编辑的内容?我知道如何进行问答,例如:

1. The sky is:

用户提出答案并:

echo For you the sky is %var%

但我想要类似的东西:

    1. The sky is: Blue

echo For you the sky is Blue

但用户可以更改它

1. The sky is: Green
echo For you the sky is Green

我不知道我是否清楚,如果没有,请告诉我。谢谢

4

4 回答 4

2

用颜色初始化变量之前:

@echo off&setlocal
set "color=Blue"
set/p "color=For you the sky is %color% (hit enter for o.k. or type in other color): "
echo For you the sky is %color%
于 2013-04-17T08:52:13.093 回答
1

您可以通过 JScript 或 VBScript 使用 WScript.Shell 的SendKeys 方法来模拟按键。试一试。我认为它可以满足您的需求。它将发送不可编辑1. The sky is:然后模拟用户击键Blue。然后用户可以自由地点击Enter,或者他可以Backspace删除“蓝色”并随意替换它。

使用.bat扩展名保存并运行它。

@if (@a==@b) @end /*

:: batch portion

@echo off
setlocal

set /p "=1. The sky is: "<NUL
call :sendkeys Blue
set /p "sky="

echo For you the sky is %sky%.  Press any key to exit.
pause >NUL

exit /b

:sendkeys <string>
cscript /nologo /e:jscript "%~f0" "%~1"
goto :EOF

:: JScript portion */
var sh = new ActiveXObject("WScript.Shell");
sh.SendKeys(WSH.Arguments(0));
于 2013-04-17T12:58:35.313 回答
0

正如其他答案所说,您必须需要第三方实用程序来解决此问题。例如,我用我的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

于 2013-04-17T22:25:15.820 回答
0
set x=blue
set y=
set /p "y=The sky is [%x%] "
if not defined y set y=%x%
echo For your the sky is %y%

如果用户输入为空,则将预定义的 %x% 复制到输出变量 %y%

于 2013-04-17T08:50:36.690 回答