繁体   English   中英

批处理文件:替换文件文本中的字符串

[英]Batch file: replace string in text of a file

在使用bat文件替换文件中的某些文本时,我需要一些帮助。

我有一个需要更改版本的模板:

[assembly: AssemblyVersion("5.1.1000.0")]
[assembly: AssemblyFileVersion("5.1.1000.0")]

我已经编写了下一个脚本,但无法理解如何在文本中更改此版本:

REM %%f is a file where I will search a string a change it
for /f "tokens=2" %%p in ('findstr /r "[0-9]\.[0-9]\.[0-9]*\.[0-9]" %%f') do (
    echo %%p
)

输出:

AssemblyVersion("5.1.1000.0")
AssemblyFileVersion("5.1.1000.0")

例如,如何将5.1.1000.0更改为7.1.1000.0? 其他所有文本保持不变,只有版本会更改。

这会将任何字符串从Version("nnnnnnnnnnn")更改为Version("7.1.1000.0") ,其中nnnnn是任何字符串。

@echo off
type "file.txt" | repl "(Version\()\q.*\q(\))" "$1\q7.1.1000.0\q$2" x >"newfile.txt"

它使用名为repl.bat的帮助程序批处理文件(由dbenham提供)-从以下网址下载: https ://www.dropbox.com/s/qidqwztmetbvklt/repl.bat

repl.bat放在与批处理文件相同的文件夹中或路径上的文件夹中。

@ECHO OFF
SETLOCAL enabledelayedexpansion

SET "oldversion=5.1.1000.0"
SET "newversion=7.1.1000.0"

(
FOR /f "delims=" %%a IN (q24144143.txt) DO (
 SET "string=%%a"
 SET "string=!string:%oldversion%=%newversion%!"
 ECHO(!string!
)
)>newfile.txt

FC q24144143.txt newfile.txt

GOTO :EOF

我使用了一个名为q24144143.txt的文件, q24144143.txt包含用于测试的数据。 产生newfile.txt

[首先提取嗅觉的修订]

@ECHO OFF
SETLOCAL enabledelayedexpansion

SET "oldversion="
SET "newversion=7.1.1000.0"

FOR /f "tokens=2delims=()" %%a IN ('findstr /r "[0-9]\.[0-9]\.[0-9]*\.[0-9]" q24144143.txt') DO (
 SET "oldversion=%%~a"
)

IF NOT DEFINED oldversion ECHO could NOT FIND old version&GOTO :EOF 
ECHO(oldversion=%oldversion%

(
FOR /f "delims=" %%a IN (q24144143.txt) DO (
 SET "string=%%a"
 SET "string=!string:%oldversion%=%newversion%!"
 ECHO(!string!
)
)>newfile.txt

FC q24144143.txt newfile.txt

GOTO :EOF

尽管-由于您说文件位于%%f所以要么将%%f分配给变量,要么调用此例程以将"%%f"作为参数并读取文件"%~1"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM