【问题标题】:string comparison in batch file批处理文件中的字符串比较
【发布时间】:2013-02-03 22:39:50
【问题描述】:

我们如何比较批处理文件中包含空格和特殊字符的字符串?

我正在尝试:

if %DevEnvDir% == "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\"(
echo VS2010
)

但它给出了一个错误“此时文件是意外的。”

我试过了:

if "%DevEnvDir%" == "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\"(
echo VS2010
)

但它给出了错误“命令的语法不正确。”

有什么想法吗?

【问题讨论】:

标签: windows batch-file


【解决方案1】:

解决方案是不要使用空格!

IF "%DevEnvDir%"=="C:\" (

【讨论】:

  • 这是错误的。你可以使用空格,只要你引用它们。问题是末尾的 missing 空格if "%env%"=="xyz"<space>(
【解决方案2】:

虽然@ajv-jsy 的答案大部分时间都有效,但我遇到了与@MarioVilas 相同的问题。如果要比较的字符串之一包含双引号 ("),则变量扩展会引发错误。

示例:

@echo off
SetLocal

set Lhs="
set Rhs="

if "%Lhs%" == "%Rhs%" echo Equal

错误:

echo was unexpected at this time.

解决方案:

启用延迟扩展和使用!而不是 %。

@echo off
SetLocal EnableDelayedExpansion

set Lhs="
set Rhs="

if !Lhs! == !Rhs! echo Equal

:: Surrounding with double quotes also works but appears (is?) unnecessary.
if "!Lhs!" == "!Rhs!" echo Equal

到目前为止,我还无法使用这种技术破解它。它适用于空字符串和我扔给它的所有符号。

测试:

@echo off
SetLocal EnableDelayedExpansion

:: Test empty string
set Lhs=
set Rhs=
echo Lhs: !Lhs! & echo Rhs: !Rhs!
if !Lhs! == !Rhs! (echo Equal) else (echo Not Equal)
echo.

:: Test symbols
set Lhs= \ / : * ? " ' < > | %% ^^ ` ~ @ # $ [ ] & ( ) + - _ =
set Rhs= \ / : * ? " ' < > | %% ^^ ` ~ @ # $ [ ] & ( ) + - _ =
echo Lhs: !Lhs! & echo Rhs: !Rhs!
if !Lhs! == !Rhs! (echo Equal) else (echo Not Equal)
echo.

【讨论】:

  • 试试这个 >>> @echo off setlocal EnableDelayedExpansion set Lhs="hello" set Rhs="hello" if !Lhs! == "hello" (echo 1Equal) :: 用双引号括起来也可以,但看起来(是?)是不必要的。如果“!Lhs!” == "hello" echo 相等超时 10 endlocal pause
  • 如果你想进行不区分大小写的字符串比较,可以使用if /I
【解决方案3】:

只需在环境变量周围加上引号(就像您所做的那样):
if "%DevEnvDir%" == "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\"
但这是您放置左括号的方式,没有空格会混淆它。

为我工作......

C:\if "%gtk_basepath%" == "C:\Program Files\GtkSharp\2.12\" (echo yes)
yes

【讨论】:

  • 感谢您的提示!!我犯的错误是,“字符串值”和(。现在可以正常工作了!谢谢。
  • 如果变量已经包含引号,这似乎会失败。例如:如果批处理文件的第一个参数已经包含双引号,则 "%1"=="" goto Help 失败。
  • 那么不等于有什么用呢?
  • 如果不是 "example" == "example" 见docs.microsoft.com/en-us/windows-server/administration/…
  • "括号" - 你的意思是括号吗?这是一个括号:[
猜你喜欢
  • 1970-01-01
  • 2022-11-21
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多