gpt4 book ai didi

c# - 如何在 Rake 任务中使用带空格的路径?

转载 作者:数据小太阳 更新时间:2023-10-29 07:59:26 24 4
gpt4 key购买 nike

我正在尝试为我的 ASP.Net 应用程序创建一个 rakefile。这是 mstest.exe 文件的路径:

mstest = "C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/mstest.exe"

这是我的 rakefile 的一部分:

task :default do
mstest = "C:/Program\ Files\ (x86)/Microsoft\ Visual\ Studio\ 12.0/Common7/IDE/mstest.exe"
sh "#{mstest_file} \"#{testdll_file} "
end

我收到这个错误:

rake aborted! Albacore::CommandNotFoundError: Command failed with status (127) - number 127 in particular means that the operating system could not find the executable:

C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/mstest.exe

我认为路径中的空格会导致错误:“Program Files (86x)/Visual Studio...”,因为如果路径中没有空格,rakefile 将正常工作。

到目前为止,我已经尝试了这些方法,但还没有成功的结果:

  1. mstest = "C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/mstest.exe"
  2. mstest = "C:/Program\Files\(x86)/Microsoft\Visual\Studio\12.0/Common7/IDE/mstest.exe"
  3. mstest = "C:/Program\s Files\s (x86)/Microsoft\s Visual\s Studio 12.0/Common7/IDE/mstest.exe"
  4. mstest = "C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\Common7\\IDE\\mstest.exe"
  5. 将 mstest 和 #{mstest} 放在单引号、双引号和这两者的组合中。

我该如何解决这个问题?

最佳答案

问题是您使用的是带转义空格的双引号,而不是单引号。考虑这些:

"foo\ bar" # => "foo bar"
'foo\ bar' # => "foo\\ bar"

或:

"C:/Program Files\ (x86)/Microsoft\ Visual\ Studio\ 12.0/Common7/IDE/mstest.exe" 
# => "C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/mstest.exe"
'C:/Program Files\ (x86)/Microsoft\ Visual\ Studio\ 12.0/Common7/IDE/mstest.exe'
# => "C:/Program Files\\ (x86)/Microsoft\\ Visual\\ Studio\\ 12.0/Common7/IDE/mstest.exe"

注意当解释器遇到 "\" 时,第一个使用双引号的意思是“使用文字字符”。使用单引号表示“使用反斜杠后跟一个空格”,您希望使用它,因为您希望在传递字符串时将反斜杠传播到操作系统。

但实际上,您可能应该看看使用 Ruby 的内置 Shellwords类:

Manipulates strings like the UNIX Bourne shell

This module manipulates strings according to the word parsing rules of the UNIX Bourne shell.

特别看shellescape :

Escapes a string so that it can be safely used in a Bourne shell command line.

考虑一下:

require 'shellwords'

'C:/Program Files\ (x86)/Microsoft\ Visual\ Studio\ 12.0/Common7/IDE/mstest.exe'
# => "C:/Program Files\\ (x86)/Microsoft\\ Visual\\ Studio\\ 12.0/Common7/IDE/mstest.exe"
Shellwords.escape("C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/mstest.exe")
# => "C:/Program\\ Files\\ \\(x86\\)/Microsoft\\ Visual\\ Studio\\ 12.0/Common7/IDE/mstest.exe"

注意 shellescape 也是如何转义括号的。

关于c# - 如何在 Rake 任务中使用带空格的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29993253/

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