2011-03-21 39 views
5

的Windows x64的版本包含有類似「\ Program Files文件(x86)的」括號命名的文件夾,這打破了我使用批處理文件。一個問題行的一個示例:的Windows 64和「括號中的路徑」批處理文件的問題

在(%路徑%)%% c不是否存在 「%%Ç\ xyz.exe」 設定XYZ = OK

即,當它到達 「)」 中的「 (86)」它提出了一個錯誤信息並退出...

關於如何解決此問題的任何想法? 這是一個相當大的批處理文件,ATM我不必重寫它在一個更好的語言的時候......

非常感謝:)

+0

你確定你複製的非常精確'FOR'指令? – 2011-03-21 18:59:47

+0

@PA是的,我可以重現錯誤。我無法想象一個快速解決方案。 – 2011-03-21 19:12:08

+0

@PA是的我只將可執行文件的名稱更改爲xyz ... – stereochilly 2011-03-21 19:29:29

回答

5

並不直接回答你的問題,但如果你正在嘗試做什麼,我想你想(這是確保文件的路徑中存在),你可以使用像在批處理文件以下。

@echo off 
    for %%i in (xyz.exe) do set xyz=%%~$PATH:i 

    if "%xyz%" == "" Goto NotFound 

    Echo "Found" 
    Goto TheEnd 

:NotFound 
    Echo "Not found" 

:TheEnd 
+0

好主意......我會試試這個以及... – stereochilly 2011-03-21 20:23:32

+0

工程奇蹟...... :) 我可以問一下所有%%〜$:這意味着什麼?非常神祕......;) – stereochilly 2011-03-21 21:05:19

+0

@stereo這是所有文件中的用法。在控制檯輸入/? – 2011-03-21 22:12:03

2

您可以使用文件夾的短名稱爲這個目的。這是你如何做到的。

在Windows中打開命令提示符。 轉到C驅動器(或您有程序文件夾的驅動器) 鍵入以下

c:\> dir /x <Hit Enter> 

這將返回所有文件夾的縮寫形式。

現在你會發現,「\程序文件(x86)」將被表示爲「PROGRA〜2」(或等效的簡稱)。 這是我用來在創建批處理腳本時防止任何錯誤。

欲瞭解更多選項,請看這裏。 http://www.computerhope.com/dirhlp.htm

Exlpanation爲「DIR/X」
「這將顯示爲非8dot3文件名產生的短名稱,格式爲的那個/ N與長名字之前插入的短名稱。如果沒有短名稱存在,空白顯示在其位置。「

+0

OP的PATH環境變量不會使用短名稱 – 2011-03-21 19:46:06

+0

難道這樣的方法會導致他不得不遍歷所有的文件夾,而不是僅僅通過「Path」環境變量所持有的文件夾? – BrMcMullin 2011-03-21 19:47:14

+0

這是一種手動方法,擊敗了「for聲明「和一般運行批處理文件... – stereochilly 2011-03-21 19:54:03

3

通常報價應該工作,但在這種情況下,你要遍歷由;分隔的所有元素。

但是,您可以將;替換爲" "組合,因此括號會被引用,您可以遍歷元素。

樣本:path=C:\temp;C:\windows;C:\Program Files (x86)
for循環將在
"C:\temp" "C:\windows" "C:\Program Files (x86)"

搜索作爲代碼,它看起來像

setlocal EnableDelayedExpansion 
set "searchPath=!path:;=" "!" 
for %%c in ("!searchPath!") do (
    if exist "%%~c\xyz.exe" set xyz=OK 
) 
+0

不錯......謝謝:) – stereochilly 2011-03-21 20:23:09