【问题标题】:How to pass a variable with multiple spaces to a batch script?如何将具有多个空格的变量传递给批处理脚本?
【发布时间】:2017-01-31 10:53:06
【问题描述】:

我想将带有多个空格的变量传递给批处理脚本,但它会删除多个空格并将其替换为一个。

C:\user\bat\myscript.bat var1 var2 "'var3'" "'some text followed by double blank__some more text'"

__要显示两个空格('',空格,不是下划线)

我已经尝试过使用%~4%4 等,但它总是会删除双空格。

br, 曼努埃尔

bat 脚本是从 Java 应用程序调用的,该应用程序从数据库中获取整个调用字符串。

脚本调用:

C:\user\bat\eqkvard.bat C:\user\reports\eqkvard.rdf C:\user\output\kontrollvarianten\myoutput.pdf "''" 
"'00.101 D-Bereiche LKZ + OKZ(blank)(blank)L52 Gbd.151 -Mediafill'" 

该网站不显示两个空白。 引号的语法如下:(")(')text(")

脚本本身:

START "myprogram" /MIN rwrun report=%1 userid=user/pw@myDB desformat=pdf destype=file desname=%2 p_1=%3 p_2=%4 

脚本使用参数调用 Oracle 报告运行时。 希望这能有所帮助。

【问题讨论】:

  • 将变量括在双引号 (") 中足以传递多个空格(单引号 ('),除非参数本身的一部分是不需要的)。 但是,您对脚本中的变量做什么 会产生影响。使用脚本的minimal reproducible example 编辑问题,指明您希望它做什么以及它正在做什么。
  • 非常适合我 (W10)。也许您应该向我们展示myscript.bat 并描述您是如何执行批处理的。
  • 感谢您的 cmets。 bat 脚本从 Java 应用程序中调用,该应用程序从数据库中获取整个调用字符串。是的,单引号是参数的一部分。脚本调用:C:\user\bat\eqkvard.bat C:\Aquery\reports\eqkvard.rdf C:\user\output\kontrollvarianten\myoutput.pdf "''" "'00.101 D-Bereiche LKZ + OKZ L52 Gbd .151 -Mediafill'" 脚本本身: START "myprogram" /MIN rwrun report=%1 userid=user/pw@myDB desformat=pdf destype=file desname=%2 p_matnr=%3 p_kpname=%4 脚本调用 Oracle使用参数报告运行时。希望这能有所帮助。
  • 将脚本编辑到问题中 - 无法在评论中阅读。
  • @ManuelU.使用测试程序代替rwrun,您所拥有的似乎保留了空白(包括双空白); rwrun 处理参数的方式可能有问题。您可以尝试将p_1=%3 p_2=%4 替换为"p_1=%~3" "p_2=%~4"。批处理文件调用中的双引号应保留空间,但将双引号作为参数的一部分。使用波浪号 (%~3) 会删除双引号,然后(重新)将整个 "p_1=...." 括在双引号中可以保留它们以供 rwrun 查看。 [续]

标签: windows oracle batch-file cmd


【解决方案1】:

感谢您的回答。 问题出在 Runtime exec 的 Java 调用中,它从字符串中删除了双空格。使用 String 数组可能是可能的,但这不适合我的情况。

如果您在使用 Java exec 命令时遇到同样的问题,以下帖子可能会有所帮助。

Runtime Exec with multiple spaces

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-17
    • 2019-11-19
    • 2015-03-07
    • 1970-01-01
    • 2023-03-28
    • 2020-11-02
    • 1970-01-01
    • 2018-10-08
    相关资源
    最近更新 更多