Java 首次尝试时批处理文件未捕获用户输入
我有一件奇怪的事情,我搞不懂。在我的批处理脚本中,我正在运行一个java cli程序,该程序连接到一个服务器,我在这方面没有问题。但是为了运行程序,我在他们的服务器凭据中输入了用户类型。如果登录失败,我会从java程序中得到一个“Error”字符串作为响应,然后询问用户是否要重试 在检查“Error”响应后,当询问用户是否要重试时,出现了我的问题。无论出于何种原因,我的tryAgain变量中都不会捕获/存储任何内容Java 首次尝试时批处理文件未捕获用户输入,java,batch-file,Java,Batch File,我有一件奇怪的事情,我搞不懂。在我的批处理脚本中,我正在运行一个java cli程序,该程序连接到一个服务器,我在这方面没有问题。但是为了运行程序,我在他们的服务器凭据中输入了用户类型。如果登录失败,我会从java程序中得到一个“Error”字符串作为响应,然后询问用户是否要重试 在检查“Error”响应后,当询问用户是否要重试时,出现了我的问题。无论出于何种原因,我的tryAgain变量中都不会捕获/存储任何内容 for /f %%i in ('java -jar cli-launcher.j
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%"
您可以使用以下命令:
@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
做了什么,为什么在引用环境变量时使用code>而不是%
,在输入set/?
或help set
后,在命令提示窗口中的命令set
输出帮助中解释了这一点
还可以查看作者的回答。我很忙,但简而言之:搜索“延迟扩展”或“setlocal enabledelayedexpansion”也可以在中找到一些帮助和示例,以获取/?