Win7和XP上cmd的不同行为

时间:2014-01-27 06:00:08

标签: windows cmd beyondcompare3

我正在尝试通过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。< / p>

我理解错误是由于名称(新文件夹)中的空格造成的,但为什么它在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

2 个答案:

答案 0 :(得分: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名称,上述内容将无效。

答案 1 :(得分: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上显示错误。对于不同的操作系统,似乎超出比较的行为有所不同。

相关问题