2011-03-21 24 views
1

Windows中的FOR命令有一些DOS選項中沒有的選項。具體來說,它支持如下返回文件名段。批處理命令未返回預期路徑

In addition, substitution of FOR variable references has been enhanced. 
    You can now use the following optional syntax: 

    %~I   - expands %I removing any surrounding quotes (") 
    %~fI  - expands %I to a fully qualified path name 
    %~dI  - expands %I to a drive letter only 
    %~pI  - expands %I to a path only 
    %~nI  - expands %I to a file name only 
    %~xI  - expands %I to a file extension only 
    %~sI  - expanded path contains short names only 
    %~aI  - expands %I to file attributes of file 
    %~tI  - expands %I to date/time of file 
    %~zI  - expands %I to size of file 


當我嘗試使用下面的命令,這是行不通的。它不打印\Program Files,它打印\

for %i in ("%programfiles%") do echo %~pi 


似乎只有p說法不正確,因爲其他參數返回預期的結果。

> for %i in ("%programfiles%") do echo %i 
    C:\Program Files 

    > for %i in ("%programfiles%") do echo %~i 
    C:\Program Files 

    > for %i in ("%programfiles%") do echo %~fi 
    C:\Program Files 

    > for %i in ("%programfiles%") do echo %~is 
    C:\PROGRA~1 

    > for %i in ("%programfiles%") do echo %~id 
    C: 


有誰知道這個問題可能是什麼?

回答

2

表明這不是一個問題,這是正確和預期的結果。 ~p提取給定filespec的路徑部分。

在這種情況下

  • c:是驅動器,通過返回%~di;
  • \是路徑,由%~pi返回;
  • Program Files是由%~ni返回的名稱;
  • C:\Program Files是完整的擴展文件規範,通過%~fi,或%~dpnxi返回。
+0

Doh!我想這是有道理的,因爲它無法區分文件名和文件夾名,所以它認爲* Program Files *是一個文件名。 **感謝您的澄清。**爲了記錄,在%(%programfiles%\「)中使用'%i'做echo%〜pi'返回'\ Program Files \',所以我想這是(儘管它不是*我想要的)。 – Synetech 2011-03-22 00:24:45

0

%~pI - expands %I to a path only

但它假定%我是路徑+文件名,所以它刪除最後一個組件。

我有一個文件C:\temp\two\myFile.txt

爲%%我在測試它( 「C:\ TEMP \ 2 \ myfile.txt的」)都呼應%〜電點
顯示\temp\two\

但僅用於路徑
爲%%我在( 「C:\ TEMP \兩個」)做回聲%〜pI值
它僅示出了'\ TEMP \」

但如果有一個\末
爲%%我在( 「C:\ TEMP \二」)也呼應%〜電點
再次\temp\two\