我有这种奇怪的事情,我无法弄明白。在我的批处理脚本中,我运行了一个连接到服务器的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%"
答案 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上的答案。