【问题标题】:Sending an argument to batch file with spaces. VB将参数发送到带有空格的批处理文件。 VB
【发布时间】:2017-09-11 09:12:32
【问题描述】:

我正在使用 VB 运行 .bat 文件并将参数传递给它。 现在我设法运行它并将参数发送给它,但遇到了问题。我的论点内部可能包含空格。我试图使用引号,但它似乎没有像我预期的那样工作。所以我在做什么:

  1. 运行此代码:System.Diagnostics.Process.Start("C:\Users\XXXXXXX\Desktop\New.bat", """"+data+"""") 其中“数据”是我发送的参数。对于测试,它包含以下值:

嘿嘿

在 .bat 文件中,我有一个代码,可以打开记事本并在其中写入参数。使用此代码,我设法将参数作为一个带空格的参数传递,但结果是:

“你好”

任何想法如何摆脱每一边的引号,同时仍然将参数作为一个带空格的参数传递? 我无法逃脱它们或用另一个符号替换。此解决方案需要将参数作为一个内部带有空格的参数传递。这可能吗?我正在使用的程序并不重要。

编辑

这是.bat文件的内容:

set directory_Rexe="C:\Users\XXXXXXX\Desktop\testBat.txt"

set var=%1


echo %var%>%directory_Rexe%

%directory_Rexe%

【问题讨论】:

  • 向我们展示批处理文件的内容。另外,如何从命令窗口运行批处理文件并成功写入包含空格的文本?
  • 我用 .bat 文件的内容更新了这个问题,但是如果变量的捕获不是问题,那就是相关的。我正在使用一个执行 VB 代码的程序。我没有使用命令窗口来运行 .bat 文件。
  • 好吧,首先,你的批处理文件已经坏了;第一行应为set directory_Rexe="C:\Users\XXXXXXX\Desktop\testBat.txt"
  • @Joey 感谢您的更正,您是对的,但这不是问题所在。它正在正确设置目录并写入文件。进行了更改,仍然无法摆脱引号。

标签: vb.net batch-file arguments


【解决方案1】:

这里有三个选项:

  1. 使用%~1,这将去掉引号。
  2. 不要关心将所有内容都放入参数 1 并引用并改用 %*。不过,您提到不希望这样。
  3. 不要将字符串作为参数传递,而是作为环境变量传递。当其中有许多字符需要转义时,这也很有帮助。

不过,所有选项都要求您更改批处理文件。

当您已经拥有一门功能完善的编程语言时,我还会质疑是否需要批处理文件。从 VB 中将文本写入文件实际上应该更容易。

【讨论】:

  • 谢谢,这工作得很好。一个担忧。 %~1 是从开头和结尾删除引号,还是从整个参数中删除引号,即使它们在中间?
  • 只有周围的。此类替换的完整列表可以在末尾的help for 中找到。它适用于for 变量和编号参数。
  • 我用 %~1 方法对其进行了测试,它适用于不包含引号的参数。我会将您的答案标记为正确,因为我也没有要求发送带引号的论点,但如果您也能帮助我解决这个问题,我将不胜感激。基本上,参数可以包含任何符号,并且无法确切知道哪些符号。
  • 最强大的选项是 (3)。或者根本不使用批处理文件。嵌入式引号可能仅在cmd /? 中概述的情况下才能正常工作,我认为它们必须保持平衡。否则你的问题不是%~1,而是cmd完成的参数拆分。
  • 说实话,我的目的不是写入 .txt 文件。它只是为了测试论点。我需要 .bat 文件来启动 R 脚本并将这些参数传递给它。不能真正从我的程序运行 R 脚本,所以使用 .bat 文件。任何人,你所有的答案都很棒。不确定环境变量如何与 .bat 一起使用,但我猜这只是我必须阅读的内容。
猜你喜欢
  • 2011-10-04
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 2018-08-11
  • 1970-01-01
  • 2012-06-05
  • 2014-04-17
  • 1970-01-01
相关资源
最近更新 更多