簡體   English   中英

Win7和XP上cmd的不同行為

[英]Different behavior of cmd on Win7 and XP

我試圖通過cmd運行以下代碼。

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

這實際上將打開“超越比較”並比較兩個文本文件。

問題是,當我在cmd [Version 6.1.7601]上運行此代碼時,它可以正確運行,但是當我在5.1.2600版本上運行時,它顯示出致命錯誤:-找不到C:/ New。

我知道錯誤是由於名稱(New Folder)中的空格引起的,但是為什么它在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

我無法解釋為什么它不起作用,但是我有一些潛在的解決方案

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名稱,則上述方法將無濟於事。

如果我正確理解了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上卻顯示錯誤。似乎無法比擬的行為在不同的OS上有所不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM