0

长话短说,我想知道如何编写批处理文件来查找像这样显示的文件路径(在 .csproj 文件内部)

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

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

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

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

4

2 回答 2

2

你可以试试这个:

@echo 关闭 &SETLOCAL
SET "fpath=C:\Program Files\file\inside\csproj" &REM 设置 csproj 文件的路径
SET "newext=.new" &REM 为新文件设置扩展名

设置“fname=”
for /r "%fpath%" %%a in (*.csproj) DO​​ SET "fname=%%~a"&CALL:process
转到:eof

:过程
(FOR /f "delims=" %%b IN ('findstr /n "^" "%fname%"') DO (
    SET "行=%%b"
    SETLOCAL 启用延迟扩展
    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!"
    )
    回声(!线!
    本地化
))>"%fname%%newext%"
转到:eof
于 2013-07-03T18:46:34.653 回答
0

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

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

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

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

于 2013-07-03T18:02:01.170 回答