2013-07-03 58 views
0

長話短說,我想知道我怎麼可以編寫一個批處理文件來查找文件路徑(.csproj的文件裏),出現這樣的批處理文件來查找文件的替換文件路徑

..\..\..\..\..\Program Files\file\inside\Repository.dll

,並使用正確的路徑名

'C:\Program Files\file\inside\Repository.dll' 

通知,文件怎麼都是一樣的更換。我在.csproj文件中正確定義了幾個文件,這只是讓他們錯誤的路徑。所以我想查找並替換文件路徑而不是文件本身。所以這基本上是查找並替換部分字符串而不是整個字符串。

+0

你應該表現出你的'csproj'文件 – Endoro

回答

0

替換f,將會解析路徑並使其成爲完全合格的路徑。

因此,要使其工作的要求是在FOR循環變量中獲取文件的路徑。

FOR /F "delims=*" %%f IN (list_of_files.txt) DO @ECHO %%~ff 

至於從.CSPROJ文件獲取路徑,我不知道格式。你能說出如何表達路徑嗎?他們是XML元素屬性還是內容?如果他們不容易找到,取決於數據的表達方式,這將非常不可靠。

+0

的更有效的例子這是它的外觀在所有文件中。每個.csproj文件中的路徑結構總是相同的,但.dll文件是不同的。 .. \ .. \ .. \ .. \ .. \ ProgramFiles \文件\裏面\ DataRepository.dll user2296207

+0

它對你有多重要,這是在批處理/ CMD中完成的? Perl/Python/almost_anything會更容易和更可靠。 ''元素是否可以保證(通過您的計算)成爲一條線?它在開始時總是有相同數量的空白嗎?我可以製作一個黑客批處理腳本來完成這個任務,但是讀起來會很麻煩。如果你從可以解析XML的東西開始,你會過得更好。 – mojo

2

你可以試試這個:

 
@echo OFF &SETLOCAL 
SET "fpath=C:\Program Files\file\inside\csproj" &REM set path to csproj files 
SET "newext=.new"         &REM set extension for new files 

SET "fname=" 
for /r "%fpath%" %%a in (*.csproj) DO SET "fname=%%~a"&CALL:process 
goto:eof 

:process 
(FOR /f "delims=" %%b IN ('findstr /n "^" "%fname%"') DO (
    SET "line=%%b" 
    SETLOCAL ENABLEDELAYEDEXPANSION 
    SET "line=!line:*:=!" 
    IF "!line:..\..\..\..\..\Program Files\file\inside\DataRepository.dll=!" neq "!line!" (
     SET "line=!line:..\..\..\..\..\Program Files\file\inside\DataRepository.dll=C:\Program Files\file\inside\DataRepository.dll!" 
    ) 
    ECHO(!line! 
    ENDLOCAL 
))>"%fname%%newext%" 
goto:eof 
相關問題