【问题标题】:Batch file to find a replace a file path in a file批处理文件查找替换文件中的文件路径
【发布时间】:2013-07-01 11:49:04
【问题描述】:

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

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

并用正确的路径名替换它

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

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

【问题讨论】:

  • 您应该展示更多有效的csproj 文件示例

标签: batch-file replace find


【解决方案1】:

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

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

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

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

【讨论】:

  • 这是所有文件的外观。每个 .csproj 文件中的路径结构始终相同,但 .dll 文件不同。 ..\..\..\..\..\ProgramFiles\file\inside\DataRepository.dll
  • 批量/CMD 对您来说有多重要? Perl/Python/almost_anything 会更容易并且更可靠。 <HintPath> 元素是否保证(根据您的估计)自己在一条线上?它在开始时总是有相同数量的空格吗?我可以制作一个 hackish 批处理脚本来执行此操作,但阅读起来会很麻烦。如果你从可以解析 XML 的东西开始,你会更好。
【解决方案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

【讨论】:

    猜你喜欢
    • 2012-07-22
    • 2018-04-16
    • 1970-01-01
    • 2012-09-29
    • 2013-09-08
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多