批处理文件 - 如何在字符串中查找引号?

时间:2017-08-24 19:21:16

标签: windows batch-file

当给出可能引用或不引用的环境变量时,我需要删除引号。

例如,我可能会得到:

  1. JAVA_HOME=C:\Program Files\Java\jdk1.8.0_144
  2. JAVA_HOME="C:\Program Files\Java\jdk1.8.0_144"
  3. 我正在尝试使用findstr,它似乎可以从cmd.exe中运行良好,但不能从我的批处理文件中运行。这就是我在test1.bat中所拥有的:

    @echo off
    
    echo.%JAVA_HOME% | findstr \^" 1>nul
    if ERRORLEVEL 0 (
        echo Found Quotes
    )
    if ERRORLEVEL 1 (
        echo No Quotes found
    )
    

    我遇到的问题是,ERRORLEVEL似乎总是0,当我运行test1.bat时,我总是收到“发现行情”的消息。

    我有这段代码可以删除有效的引号for /f "delims=" %%G IN (%JAVA_HOME%) DO SET JAVA_HOME=%%G,但只有在有引号的情况下,才需要让上述findstr条件正常工作。

3 个答案:

答案 0 :(得分:1)

在测试0,IIRC之前,您通常必须测试ERRORLEVEL的其他值。这对我很有用:

@echo off

echo.%JAVA_HOME% | findstr \^" 1>nul
if ERRORLEVEL 1 (
    echo No quotes found
    goto :eof
)
if ERRORLEVEL 0 (
    echo Found quotes
)

注意:删除goto :eof表示如果没有匹配,则会echo输出两行。

答案 1 :(得分:1)

批处理文件已经能够删除for中的引号 - 示例中的%%G等循环变量,因此您不需要任何findstr逻辑。您for无效的原因是因为您没有引用%JAVA_HOME%。你总是要引用带空格的参数。

help for开始,语法为:

  

FOR / F ["选项"]%变量IN("字符串")DO命令   [命令参数]

对于像%%G这样的自动变量,波形符运算符会删除引号(如果它们存在)。

来自help for

  

此外,已替换FOR变量引用   增强。您现在可以使用以下可选语法:

  %~I         - expands %I removing any surrounding quotes (")

因此,使用这2条信息,将for循环更改为此选项可删除%JAVA_HOME%中的引号。

for /f "delims=" %%G IN ("%JAVA_HOME%") DO SET "JAVA_HOME=%%~G"

答案 2 :(得分:0)

@ECHO OFF
SETLOCAL

SET JAVA_HOME=C:\Program Files\Java\jdk1.8.0_144
SET "java_home=%java_home:"=%"
SET j
ECHO -------------------------------------------
SET JAVA_HOME="C:\Program Files\Java\jdk1.8.0_144"
SET "java_home=%java_home:"=%"
SET j

GOTO :EOF

无论哪种方式,java_home都会结束"裸体"。