【问题标题】:Different behavior of cmd on Win7 and XPcmd 在 Win7 和 XP 上的不同行为
【发布时间】:2014-01-27 06:00:07
【问题描述】:

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

【问题讨论】:

  • 命令行解析是由程序自己完成的,不是由cmd.exe完成的。
  • @RaymondChen 通过程序,您的意思是调用 cmd 并传递参数的代码?
  • 否 - 无法比较的是解释 @ 之后的参数。

标签: windows cmd beyondcompare3


【解决方案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 名称,上述方法将没有任何好处。

【讨论】:

    【解决方案2】:

    如果我对 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 上显示错误。似乎超越比较对于不同操作系统的行为不同。

    【讨论】:

    • 使用"%~3" "%~1" "%~2" 看看是否会改变行为。
    • @foxidrive 它没有用。错误:-找不到文件 %~1
    • 两台机器上的 Beyond Compare 版本是否相同?
    • @dbenham 。是的,两台机器上都是一样的
    猜你喜欢
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    相关资源
    最近更新 更多