【问题标题】:Command line - "x was unexpected at this time"命令行 - “此时 x 出乎意料”
【发布时间】:2020-07-05 13:13:58
【问题描述】:

我正在使用命令行创建一些东西并遇到了这个错误 - “x 在这个时候是意外的”,我尝试将变量切换为 x、%%x 和 %x%,但它们都不起作用。以下是部分代码:

echo Please enter the memory value [Recommended: 512M Xms 1024M Xmx]
set /p rams=Xms[MB]=
set /p ramx=Xmx[MB]=
echo %rams%|findstr /R "^[1-9][0-9]*$">nul
if NOT %errorlevel% EQU 0 (
    echo Error: Please enter a valid number [Xms].
)
echo %ramx%|findstr /R "^[1-9][0-9]*$">nul
if NOT %errorlevel% EQU 0 (
    echo Error: Please enter a valid number [Xmx].
)
if NOT %errorlevel% EQU 0 (
    echo Execution failure: Invalid args
    pause
    goto start
)
set count=0
for %x in (*.jar) do set /a count+=1
if %count% == 1 (
    java -Xms%rams%M -Xmx%ramx%M -jar BCU.jar
    echo BCU.jar was executed.
    pause
    goto start
)
if %count% GEQ 1 (
    echo [= = = = Multiple file found = = = =]
    dir *.jar /B
    echo [= = = = = = = = = = = = = = = = = =]
    echo Please input file by the whole name with extension.
    set /p file=Select File:
    if exist %file% (
    java -Xms%rams%M -Xmx%ramx%M -jar %file%
    echo %file% was executed.
    pause
) else (
    echo File was not found.
    pause
)
goto start
)

由于某种原因,当我从命令提示符处执行 for 命令时,它可以正常工作,但在运行时却不行。

  • 我以管理员身份运行程序
  • 只有for部分有问题,上面的都正常
  • 预计将定义计数值并能够用于下面的 IF 语句
  • 众所周知,java 行可以正常工作,没有问题

完整文件位于:https://drive.google.com/file/d/1SgdoyCL5qaZGIWGJQDUKEJyEyUI2Y2u8/view?usp=sharing

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    您的立即错误是您需要在批处理文件中使用%%,单个% 仅在命令行上有效。换句话说,它应该是:

    for %%x in (*.jar) do set /a count+=1
    

    (我不相信你确实按照你的说法尝试了%%x,因为这确实有效,但可能是你的格式不正确)。

    但是你会遇到另一个问题(至少)使用这样的东西(缩减并格式化以便解释):

    if %count% GEQ 1 (
        set /p file=Select File:
        if exist %file% (
            java -Xms%rams%M -Xmx%ramx%M -jar %file%
        )
    )
    

    上面的 整个 块在它执行之前被评估,这意味着 %file% 将变成它在块开始之前 的任何内容,尽管事实上你是将其设置在块内。

    您需要在文件顶部使用setlocal enabledelayedexpansion,并使用!file!延迟扩展变体,例如:

    setlocal enableextensions enabledelayedexpansion
    :
    if %count% GEQ 1 (
        set /p file=Select File:
        if exist !file%! (
            java -Xms%rams%M -Xmx%ramx%M -jar !file!
        )
    )
    :
    endlocal
    

    只有在循环中可以更改的变量才需要它,因此在这种特殊情况下,%rams%%ramx% 不需要 - 它们是在 if 块开始之前设置的。

    【讨论】:

    • 您好!对文件进行一些编辑后,这就是问题所在!问题是 set /a count+=1 必须在 () 括号中,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多