【问题标题】:Escaping @ in Windows environment variable在 Windows 环境变量中转义 @
【发布时间】:2019-04-16 21:55:56
【问题描述】:

我在一个 bat 文件中有以下几行:

SET LIB="C:\tools\oracle\main\ojdbc8.jar"
SET DRIVER="Java::oracle.jdbc.driver.OracleDriver"
SET CONN="jdbc:oracle:thin:@//localhost:1521/XE"

logstash -f logstash.conf

前两个 SET 工作正常,但 logstash 程序抱怨 CONN 变量不是有效的 URI。我试图在@ 之前放置一个^ 以逃避它,但问题仍然存在。如何解决这个问题?

【问题讨论】:

  • 我不熟悉你想要做什么,但标准约定不是更像protocol://user:password@host:port/path吗?
  • 你也不需要转义@。只有当它成为一行中的第一个字符时,它才具有特殊含义。如果它确实需要被转义,而它不需要,那么像你所做的那样将它放在引号中就足够了。
  • 你应该使用这个语法,Set "VarName=StringValue",然后你应该双引号%VarName%如果/在任何使用它的后续命令中需要。
  • @Compo 你的解决方案有效,把它写成答案

标签: windows batch-file environment-variables


【解决方案1】:

您当前包含双引号作为变量值字符串的一部分。当setting 你的变量时,我建议使用以下语法:

Set "VarName=StringValue"

然后,如果/在任何使用它的后续命令中需要,您可以双引号 %VarName%

在您提供的示例中,我建议您因此使用:

Set "LIB=C:\tools\oracle\main\ojdbc8.jar"
Set "DRIVER=Java::oracle.jdbc.driver.OracleDriver"
Set "CONN=jdbc:oracle:thin:@//localhost:1521/XE"

并在您的脚本中独立决定是否使用:

  1. %LIB%%DRIVER%%CONN%
  2. "%LIB%""%DRIVER%""%CONN%"
  3. !LIB!!DRIVER!!CONN!           - (延迟扩展)
  4. "!LIB!""!DRIVER!""!CONN!" - (延迟扩展)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 2014-07-21
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    相关资源
    最近更新 更多