批处理 SET 行中突然出现“命令语法不正确”

批处理 SET 行中突然出现“命令语法不正确”

我正在运行 Windows 10 的最新版本(昨天更新),由于未知原因,我无法启动Maven再也没有了,Windows(PowerShell 和命令提示符)给我“命令语法不正确”——而我并没有在 maven 中更改任何内容。我也下载了最新版本,同样的问题。

可能与最近的 Windows 更新有关(2021 年 9 月 14 日 - KB5005565(操作系统内部版本 19041.1237、19042.1237 和 19043.1237),不确定,但它运行了好几年都没有问题,而且问题出现在更新出现在我的系统上的同一天(尽管在我实际更新和重新启动之前)。

脚本如下所示...

@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%"=="on" echo %MAVEN_BATCH_ECHO%

@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%"=="" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
:skipRcPre

@setlocal

set ERROR_CODE=0

@REM ==== START VALIDATION ====
if not "%JAVA_HOME%"=="" goto OkJHome
for %%i in (java.exe) do set "JAVACMD=%%~$PATH:i"
goto checkJCmd

:OkJHome
set "JAVACMD=%JAVA_HOME%\bin\java.exe"

:checkJCmd
if exist "%JAVACMD%" goto chkMHome

我尝试切换到@echo=on以获得一些可能失败的输出,但这对我没什么帮助。当从其文件夹运行脚本时(以避免任何路径问题),输出似乎表明 SET ... 命令是问题所在。当使用 运行(从同一文件夹)时@echo=on,脚本会产生以下输出:

C:\[..]\apache-maven-3.8.2\bin>.\mvn

C:\[..]\apache-maven-3.8.2\bin>if not "" == "" goto skipRcPre

C:\[..]\apache-maven-3.8.2\bin>if exist "C:\Users\Flo\mavenrc_pre.bat" call "C:\Users\Flo\mavenrc_pre.bat"

C:\[..]\apache-maven-3.8.2\bin>if exist "C:\Users\Flo\mavenrc_pre.cmd" call "C:\Users\Flo\mavenrc_pre.cmd"

C:\[..]\apache-maven-3.8.2\bin>set ERROR_CODE=0 

The syntax of the command is incorrect.

C:\[..]\apache-maven-3.8.2\bin>if not "C:\Program Files\Java\jdk-11.0.10""=="" goto OkJHome

C:\[..]\apache-maven-3.8.2\bin>

奇怪的是,set ERROR_CODE=0在控制台中手动调用没有显示任何错误。

最近更新:

  • 2021 年 9 月 14 日 - KB5005565(操作系统内部版本 19041.1237、19042.1237 和 19043.1237)
  • KB4023057
  • 2021 年 8 月 10 日 - KB5005033(操作系统内部版本 19041.1165、19042.1165 和 19043.1165)......现在我们已经回来 1 个多月了,它一直运行到前天。

答案1

无论出于什么原因,显示错误的行实际上是这一行,而不是输出之前的那一行:

C:\[..]\apache-maven-3.8.2\bin>if not "C:\Program Files\Java\jdk-11.0.10""=="" goto OkJHome

路径末尾有两个双引号,而不只是一个。这很可能是由于我错误地尝试将 JAVA_HOME 设置为以双引号结尾但未以双引号开头的内容,这显然是我的错。

看来更新纯属巧合,在同一时间段,一个美好的错误现实就呈现在我眼前,啧啧。

相关内容