Batch file 批处理文件以查找替换文件中的文件路径
长话短说,我想知道如何编写一个批处理文件来找到一个文件路径(在.csproj文件中),该路径如下所示Batch file 批处理文件以查找替换文件中的文件路径,batch-file,replace,find,Batch File,Replace,Find,长话短说,我想知道如何编写一个批处理文件来找到一个文件路径(在.csproj文件中),该路径如下所示 。\..\..\..\Program Files\file\inside\Repository.dll 并将其替换为正确的路径名 'C:\Program Files\file\inside\Repository.dll' 请注意,这些文件是如何相同的。我在.csproj文件中正确定义了几个文件,这只是找到错误文件的路径。所以我只想找到并替换文件路径,而不是文件本身。所以这本质上是查找和替换字符
。\..\..\..\Program Files\file\inside\Repository.dll
并将其替换为正确的路径名
'C:\Program Files\file\inside\Repository.dll'
请注意,这些文件是如何相同的。我在.csproj文件中正确定义了几个文件,这只是找到错误文件的路径。所以我只想找到并替换文件路径,而不是文件本身。所以这本质上是查找和替换字符串的一部分,而不是整个字符串 替换
f
,一个la用于…%v IN(…)DO…%~fv
将解析路径并使其成为完全限定路径
因此,使其工作的要求是在FOR循环变量中获取文件的路径
FOR /F "delims=*" %%f IN (list_of_files.txt) DO @ECHO %%~ff
至于从.CSPROJ文件获取路径,我不知道格式。你能说说这些路径将如何表达吗?它们是XML元素属性还是内容?如果它们不容易找到,这将非常不可靠,这取决于数据的表达方式。您可以尝试以下方法:
@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
@echo OFF和SETLOCAL
设置“fpath=C:\Program Files\file\inside\csproj”&REM设置csproj文件的路径
设置“newext=.new”&为新文件设置扩展名
设置“fname=”
对于(*.csproj)中的/r“%fpath%”%%a,请设置“fname=%%~a”&调用:进程
后藤:eof
:进程
(对于/f“delims=“%%b IN('findstr/n“^”“%fname%”)DO(
设置“行=%%b”
SETLOCAL ENABLEDELAYEDEXPANSION
设置“行=!行:*=!”
如果“!line:..\..\..\..\..\Program Files\file\inside\DataRepository.dll=!”neq“!line!”(
设置“line=!line:..\..\..\..\..\..\Program Files\file\inside\DataRepository.dll=C:\Program Files\file\inside\DataRepository.dll!”
)
回声(!线!
端部
))>%fname%%newext%
后藤:eof
您应该显示
csproj
文件的更多有效示例这是它在所有文件中的外观。每个.csproj文件中的路径结构总是相同的,但是.dll文件是不同的…\\\\\\\\\\\\..\ProgramFiles\file\inside\DataRepository.dlh批处理/CMD?Perl/Python/几乎所有事情对您来说都有多重要ld更简单、更可靠。
元素是否保证(根据您的计算)自己在一行上?它在开始时是否总是有相同数量的空白?我可以编写一个黑客批处理脚本来完成这项工作,但阅读起来会很麻烦。如果您从能够解析XML的东西开始,您会过得更好。