2015-01-26 83 views
2

我有一個使用下面的命令如何在For命令中刪除%〜p後面的?

for /r %%i in (dir) do @echo %server%%%~pi>>%filename% 

其中,%服務器%是文件夾的網絡位置(其它用戶使用不同的驅動器映射)和%文件名%是我存儲在文本文件中的Windows批處理文件結果(通過這種方式進行調試)。

在文件中列出的文件夾最終會產生尾部反斜槓,這似乎在讀取文件時會引起一些問題。我怎樣才能擺脫尾隨的反斜槓,而無需手動編輯創建的文件?

回答

0

您可以將目錄名稱(使用尾部反斜槓)分配給普通變量,然後使用子字符串變量擴展0和-1對其進行回顯以排除最後一個字符,全部位於for-loop的命令列表中身體:

for /r %%i in (dir) do @(set d=!server!%%~pi& echo !d:~0,-1!) >>!filename! 

下面是從help set子字符串變量擴展的幫助:

還可以指定爲子擴張。

%PATH:~10,5% 

會擴展PATH環境變量,然後只能使用5個 字符開始在第11(偏移10)膨脹 結果的字符。如果未指定長度,則默認爲 變量值的其餘部分。如果其中一個數字(偏移量或長度)爲 爲負數,則使用的數字是環境變量 的值的長度,該值添加到指定的偏移量或長度。

%PATH:~-10% 

會提取PATH變量的最後10個字符。

%PATH:~0,-2% 

會提取除PATH變量的最後2個字符以外的所有字符。

注意,對於這個工作,你必須使enabledelayedexpansion並使用!分隔符變量在for循環體,以確保它循環處理期間膨脹,而不是在循環的解析。我還將%filename%更改爲!filename!,因爲始終啓用和使用此功能是一種很好的做法,即使它不是必需的。

+0

這正是我所需要的。這樣一個簡單的任務,但答案躲過了我。 – 2015-01-26 18:37:18

+0

Dosbatch中沒有什麼是簡單的。 ;) – bgoldst 2015-01-26 18:40:21

+0

如果路徑包含'!'字符,則會遇到問題。這可以通過在循環中打開和關閉延遲擴展來解決。但有一個[更好的解決方案](http://stackoverflow.com/a/28163790/1012053)。 – dbenham 2015-01-27 05:28:13

1

一個簡單的辦法是追加一個點,並使用第二個FOR循環得到的歸一化的路徑,名稱和擴展名:

for /r %%i in (dir) do for %%F in ("%%~pi.") do echo %server%%%~pnxF>>%filename% 

的一大好處是,這並不需要延遲擴展,所以你不要當FOR變量被展開時,不必擔心!被損壞的路徑。