0

我正在尝试通过 cmd 运行以下代码。

"C:\Program Files\Beyond Compare 2\BC2.exe" @"C:\New Folder\Myscript.txt" "C:\New Folder\A.txt" "C:\New Folder\B.txt"

这实际上将打开 Beyond Compare 并比较两个文本文件。

问题是,当我在 cmd[Version 6.1.7601] 上运行此代码时,它运行正常,但是当我在 5.1.2600 版本上运行它时,它显示一个致命错误:- 找不到 C:/New。

我知道错误是由于名称中的空格(新文件夹),但为什么它在 Win 7 上运行良好。两个版本的 cmd 在接受参数的方式上是否有一些不同?

Myscript.txt 的内容:-

file-report layout:side-by-side &
options:display-all &
output-to:%3 output-options:html-color,wrap-word %1 %2
4

2 回答 2

1

我无法解释为什么它不起作用,但我有一些潜在的解决方案

1)在文件所在位置使用当前目录运行

由于空格在文件夹名称中,并且所有文件都位于同一位置,因此您可以通过简单地将目录更改为该文件夹并使用相对路径来避免文件夹名称。

pushd "c:\new folder"
"C:\Program Files\Beyond Compare 2\BC2.exe" @Myscript.txt A.txt B.txt

当然,如果您的文件位于不同的位置,或者文件名有空格,这将不起作用(假设空格确实是问题)

2) 使用简短的 8.3 名称

我讨厌简短的 8.3 名称,因为与它们相关的许多错误。但有时它们可​​能很有用。

您可以使用DIR /X. 或者您可以在批处理脚本中使用以下内容以编程方式获取短路径。

for %%A in ("C:\New Folder\Myscript.txt") do (
  for %%B in ("C:\New Folder\A.txt") do (
    for %%C in ("C:\New Folder\B.txt") do (
      "C:\Program Files\Beyond Compare 2\BC2.exe" @"%%~fsA" "%%~fsB" "%%~fsC"
    )
  )
)

当然,如果在您的卷上禁用了简短的 8.3 名称,上述内容将没有任何好处。

于 2014-01-27T11:26:45.713 回答
0

如果我理解正确 Raymond 的评论,解析是由 Beyond Compare 而非 cmd 完成的。

我试着用

file-report layout:side-by-side &
options:display-all &
output-to:"%3" output-options:html-color,wrap-word "%1" "%2"

它在 XP 上运行良好,但在 Windows 7 上显示错误。似乎超越比较对于不同的操作系统表现不同。

于 2014-01-27T07:11:56.880 回答