gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:14:18 32 4
gpt4 key购买 nike

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

例如,我可能会得到:

  1. JAVA_HOME=C:\Program Files\Java\jdk1.8.0_144
  2. 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< 时我总是收到消息“Found Quotes”/.

我有这段代码可以删除引号 for/f "delims="%%G IN (%JAVA_HOME%) DO SET JAVA_HOME=%%G 可以找到,但只有当有引号时,因此需要使上述 findstr 条件正常工作。

最佳答案

批处理文件已经能够删除 for 循环变量上的引号,例如您示例中的 %%G,因此您不需要任何 findstr 逻辑。您的 for 不起作用的原因是因为您没有引用 %JAVA_HOME%。您始终必须引用带有空格的参数。

来自help for,语法是:

FOR /F ["options"] %variable IN ("string") DO command [command-parameters]

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

来自帮助:

In addition, substitution of FOR variable references has been enhanced. You can now use the following optional syntax:

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

因此,根据这两条信息,将您的 for 循环更改为此,以从 %JAVA_HOME% 中删除引号。

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

关于windows - 批处理文件 - 如何在字符串中查找引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45869419/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com