在第一次尝试时间批处理文件中未捕获用户输入

时间:2014-08-05 13:43:51

标签: java batch-file

我有这种奇怪的事情,我无法弄明白。在我的批处理脚本中,我运行了一个连接到服务器的java cli程序,我没有遇到任何问题。但是为了运行程序,我让用户输入他们的服务器凭据。如果登录失败,我会得到一个"错误"字符串作为java程序的响应,然后我问用户是否要再试一次。

检查"错误"的响应后,询问用户是否要再试一次时出现问题。无论出于何种原因,我的tryAgain变量都没有捕获/存储任何内容。

for /f %%i in ('java -jar cli-launcher.jar -a https://127.0.0.1:8000 -u admin -p admin -s someOtherScript.txt) do set response=%%i

::Something about this IF statement is causing an issue
IF NOT %response::=%==Error (echo "No Error"
) else (SET /p tryAgain=Try Again: 
  echo "%tryAgain%"
)

编辑:

看起来我的问题与我检查响应字符串有关。当我拿出tryAgain用户捕获时,它工作正常。谁能看到我做错了什么?

for /f %%i in ('java -jar cli-launcher.jar -a https://127.0.0.1:8000 -u admin -p admin -s someOtherScript.txt) do set response=%%i

::This works fine
SET /p tryAgain=Try Again: 
echo "%tryAgain%"

1 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

@echo off
setlocal EnableDelayedExpansion
for /f %%i in ('java -jar cli-launcher.jar -a https://127.0.0.1:8000 -u admin -p admin -s someOtherScript.txt) do set response=%%i

if not "!response::=!"=="Error" (
   echo "No Error"
) else (
   Set /p "tryAgain=Try Again (y/n)? " 
   echo "!tryAgain!"
)
endlocal

在输入后,在命令提示符窗口中输出命令setlocal EnableDelayedExpansion的帮助中解释了!做什么以及为什么使用%而不是set来引用环境变量set /?help set

还可以查看IF statement in batch causing issues. Works when ran individually?撰写的MC ND上的答案。