2013-03-11 74 views
0

問題:FOR命令的輸出將%〜dpI展開爲一個具有額外\的結尾的路徑,該路徑不適合作爲REPLACE命令的目標路徑。FOR命令將%〜dpI擴展爲帶有額外「」的路徑,不適合替換命令的目標路徑

問題:如何擺脫額外的\?

我想做什麼:如果文件較新,則將文件1.txt複製到C:\ aaa下的每個子目錄。

目錄結構:

c:\aaa 
c:\aaa\1 
c:\aaa\2 
... 

使用:

FOR /R C:\aaa %I IN (1.txt) DO REPLACE c:\aaa\1.txt %~dpI /U /R 

樣本輸出:

c:\aaa>REPLACE c:\aaa\1.txt c:\aaa\1\ /U /R 
Path not found - C:\aaa\1\ 
no files replaced 

c:\aaa>REPLACE c:\aaa\1.txt c:\aaa\2\ /U /R 
Path not found - C:\aaa\2\ 
no files replaced 

回答

2
REPLACE c:\aaa\1.txt c:\aaa /U /R /S 

爲什麼用FOR/R煩惱呢?

+0

非常感謝,我在想什麼:) – user2155235 2013-03-11 15:28:49

1

選項1

使用%~dpI..\%~nI

這將擴展爲:

c:\aaa\1\..\1 

選項2

環境變量設置爲路徑,然後抓住所有,但最後一個字符:

SET targetpath=C:\aaa\1\ 
ECHO %targetpath:~,-1% 

輸出:

C:\aaa\1 
0

這不是很好,但DOS批次永遠不會。您可以用/F開關在那裏拋出另一個FOR來處理名稱。這是我跑的:

FOR /R . %I IN (foo) DO @FOR /F "delims=" %N IN ("%~dpI.") DO @echo %~fN 

從當前目錄輸出每個目錄名稱。 "delims="將包含空格作爲有效字符。該%~dpI.是一個kludge使用該目錄作爲完整路徑,然後%~fN給出了完整的目錄名稱。

您可以使用DIR命令獲得類似的結果。嘗試:

DIR /AD /S /B 

所以實際上:

FOR /F "delims=" %I IN ('dir /AD /S /B') do @echo %~fI 

例外的是,上述不包括的基本目錄。

+0

你很努力,但看起來不必要的長。 – 2013-03-11 05:31:54

1

只添加一個指向您的命令:

FOR /R C:\aaa %I IN (1.txt) DO REPLACE c:\aaa\1.txt %~dpI. /U /R