使用批处理将文本文件中的固定值替换为变量

Replace a fixed value with a variable in a text file with batch

我想使用批处理文件将 test.txt 中的 OLD 替换为 %NEW%:

@echo off 
set /p NEW=""
set InputFile=test.txt
find OLD
replace %NEW%

我的 test.txt 包含各种字符,例如 ~ : ; _ . 我将其归因于各种解决方案。

我曾尝试使用 BatchSubstitude.bat 来实现此目的,但它不会 "find" OLD 也不会替换任何文本。

我也曾尝试使用 fart.exe,但在尝试执行此操作时收到错误消息:

find_string="OLD"
replace_string="test"
actual find_length=3
actual replace_length=4
processing \filepath\,test.txt
skipping binary file: \filepath\test.txt

这方面的文档很少,我无法google 疯狂地提供解决方案。

我目前使用批处理的原因是我执行各种 windows CE 操作,例如 cecopy、pdel 和 rapistart windows 通过 activesync 和批处理的 CE 部署似乎是最简单的获得我想要的结果的方法 - 我在批处理上完全是菜鸟。

有谁知道如何通过批处理实现这一点,并解释一下各种功能如何实现这一点?

干杯!

不要从 sourceforge 下载任何东西,所以最好跳过 fart-it。 当使用特殊字符 (&<>|^) 时,dostips 中的方法并不那么健壮,因为它指出 there.Here 是一个简单的 batch/jscript,它将替换文件中的内容(您可以更改文件位置等硬编码内容):

0</* :
@echo off

set "file=c:\test.txt"
set "find=OLD"
set /p "replace=NEW: "
cscript /nologo /E:jscript "%~f0" %file% %find% %replace%

echo ==replaced==


exit /b */0;

var FSOObj = new ActiveXObject("Scripting.FileSystemObject");
var ARGS = WScript.Arguments;
if (ARGS.Length < 3 ) {
 WScript.Echo("Wrong arguments");
 WScript.Quit(1);
}
var filename=ARGS.Item(0);
var find=ARGS.Item(1);
var replace=ARGS.Item(2);

var readStream=FSOObj.OpenTextFile(filename, 1);

var content=readStream.ReadAll();
readStream.Close();

function replaceAll(find, replace, str) {
  return str.replace(new RegExp(find, 'g'), replace);
}

var newConten=replaceAll(find,replace,content);

var writeStream=FSOObj.OpenTextFile(filename, 2);
writeStream.WriteLine(newConten);
writeStream.Close();

还要检查这个更高级的工具

FindRepl

JRepl

试试这个:

@set @a=0  /*

@echo off 
set /p NEW=""
set InputFile=test.txt
cscript //nologo //E:JScript "%~F0" "%NEW%" < "%InputFile%" > output.tmp
move /Y output.tmp "%InputFile%"

@goto :EOF */

WScript.Stdout.Write(WScript.Stdin.ReadAll().replace(/OLD/g,WScript.Arguments(0)));