我希望有一个解决方案,
我想知道某个善良的人是否可以帮我创建一个输入行,其中包含点作为输入字段......(每次输入一个字母时,都会替换一个点)
以下是一个例子:
@echo off
title Input with dots
set /p action = "·······················································"
if %action% == option1 goto print1
:print1
echo this works!
pause
exit
这是我到目前为止所做的,但我被卡住了。
defaultPage
答案 0 :(得分:2)
您可以输出点,通过输出一堆退格字符向后移动光标,然后提示用户。要输出退格符,必须将退格捕获到变量。
[ERROR] [06/02/2017 15:30:14.966] [JobServer-akka.actor.default-dispatcher-3] [ActorSystem(JobServer)] Uncaught error from thread [JobServer-akka.actor.default-dispatcher-3] shutting down JVM since 'akka.jvm-ex$
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at akka.event.slf4j.Logger$.apply(Slf4jLogger.scala:30)
at akka.event.slf4j.SLF4JLogging$class.log(Slf4jLogger.scala:19)
at akka.event.slf4j.Slf4jLogger.log$lzycompute(Slf4jLogger.scala:54)
at akka.event.slf4j.Slf4jLogger.log(Slf4jLogger.scala:54)
at akka.event.slf4j.Slf4jLogger$$anonfun$receive$1.applyOrElse(Slf4jLogger.scala:80)
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:498)
at akka.actor.ActorCell.invoke(ActorCell.scala:456)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:237)
at akka.dispatch.Mailbox.run(Mailbox.scala:219)
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 14 more
Uncaught error from thread [JobServer-akka.actor.default-dispatcher-3] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[JobServer]
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at akka.event.slf4j.Logger$.apply(Slf4jLogger.scala:30)
at akka.event.slf4j.SLF4JLogging$class.log(Slf4jLogger.scala:19)
at akka.event.slf4j.Slf4jLogger.log$lzycompute(Slf4jLogger.scala:54)
at akka.event.slf4j.Slf4jLogger.log(Slf4jLogger.scala:54)
at akka.event.slf4j.Slf4jLogger$$anonfun$receive$1.applyOrElse(Slf4jLogger.scala:80)
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:498)
at akka.actor.ActorCell.invoke(ActorCell.scala:456)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:237)
at akka.dispatch.Mailbox.run(Mailbox.scala:219)
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 14 more
基于@TripeHound's excellent idea使用回车来移动文本光标,这是使用批处理功能确定以编程方式填充该行的点数的示例:
@echo off & setlocal
rem // capture backspace character to a variable
rem // credit: http://www.dostips.com/forum/viewtopic.php?p=22010#p22010
for /f %%a in ('"prompt $H&for %%b in (1) do rem"') do set "BS=%%a"
rem // cosmetic, non-functional prompt:
<NUL set /P "=Fill in the blank: .................................................."
rem // backspace 50 times (one for each dot)
for /L %%I in (1,1,50) do <NUL set /P "=%BS%"
rem // real prompt this time
set /P "response="
echo You entered "%response%".
pause
exit /b
答案 1 :(得分:1)
rojo's excellent answer上的次要变体。这不是在点上退格,而是使用回车(没有换行)来再次输出提示,点,CR和提示:
@echo off
setlocal enabledelayedexpansion
REM From https://groups.google.com/forum/#!topic/alt.msdos.batch.nt/AUXP8XbRAJA
for /f %%a in ('copy /Z "%~dpf0" nul') do set "\r=%%a"
set "DOTS=.................................................."
set "PROMPT=Fill in the blank: "
set /p "response=%PROMPT%%DOTS%!\r!%PROMPT%"
echo You entered "%response%".
虽然正如rojo所说,如果在别处使用感叹号,使用enabledelayedexpansion
可能会导致问题。一种解决方案是将此代码放入&#34;子程序&#34; (我另外传入变量以包含响应和提示):
@echo off
setlocal
call :getString answer "Fill in the blank: "
echo You entered "%answer%".
goto :eof
:getString
setlocal enabledelayedexpansion
REM From https://groups.google.com/forum/#!topic/alt.msdos.batch.nt/AUXP8XbRAJA
for /f %%a in ('copy /Z "%~dpf0" nul') do set "\r=%%a"
set "DOTS=.................................................."
set "PROMPT=%~2"
set /p "response=%PROMPT%%DOTS%!\r!%PROMPT%"
endlocal && set %1=%response%
goto :eof
最后一行(endlocal && ...
)允许我们结束局部性(和延迟扩展),同时仍然使用块中定义的环境变量的值。)
(我正在研究一种替代解决方案,使用(现在不是标准的,但很容易获得的)choice
命令来逐个处理输入,但它看起来并不像是去任何地方)。