长话短说,我想知道如何编写批处理文件来查找文件路径(在.csproj文件中),看起来像这样
..\..\..\..\..\Program Files\file\inside\Repository.dll
并将其替换为正确的路径名
'C:\Program Files\file\inside\Repository.dll'
注意,文件是如何相同的。我在.csproj文件中正确定义了几个文件,这只是错误的路径。所以我想找到并替换文件路径而不是文件本身。所以这基本上是查找并替换字符串的一部分而不是整个字符串。
答案 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元素属性还是内容?如果它们不容易找到,根据数据的表达方式,这将非常不可靠。