Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理文件以查找替换文件中的文件路径_Batch File_Replace_Find - Fatal编程技术网

Batch file 批处理文件以查找替换文件中的文件路径

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文件中正确定义了几个文件,这只是找到错误文件的路径。所以我只想找到并替换文件路径,而不是文件本身。所以这本质上是查找和替换字符

长话短说,我想知道如何编写一个批处理文件来找到一个文件路径(在.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的东西开始,您会过得更好。