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

时间:2014-06-10 14:53:22

标签: batch-file replace

我需要一些帮助来使用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?所有文本的其他文本保持不变,只会更改版本。

2 个答案:

答案 0 :(得分:1)

这会将任何字符串从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放在与批处理文件相同的文件夹中或放在路径上的文件夹中。

答案 1 :(得分:0)

@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的文件,其中包含我的测试数据。 生成newfile.txt

[首先提取olversion的修订]

@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" < / p>