当给出可能引用或不引用的环境变量时,我需要删除引号。
例如,我可能会得到:
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_144
JAVA_HOME="C:\Program Files\Java\jdk1.8.0_144"
我正在尝试使用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
条件正常工作。
答案 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
都会结束"裸体"。