批处理文件,用于查找替换文件中的文件路径

时间:2013-07-03 16:56:30

标签: batch-file replace find

长话短说,我想知道如何编写批处理文件来查找文件路径(在.csproj文件中),看起来像这样

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

并将其替换为正确的路径名

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

注意,文件是如何相同的。我在.csproj文件中正确定义了几个文件,这只是错误的路径。所以我想找到并替换文件路径而不是文件本身。所以这基本上是查找并替换字符串的一部分而不是整个字符串。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

替换f,la FOR ... %v IN (...) DO ... %~fv将解析路径并使其成为完全合格的路径。

因此,要使其工作的要求是获取FOR循环变量中文件的路径。

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

至于从.CSPROJ文件获取路径,我不知道格式。你能说出如何表达这些路径吗?它们是XML元素属性还是内容?如果它们不容易找到,根据数据的表达方式,这将非常不可靠。