我编写的查找和替换批处理脚本有问题。我需要能够打开一个文本文件并从 Windows 命令行更改其中的一些值。我无法安装 sed.exe 或 FART 或 powershell,所以我需要这样做。在linux中做起来容易得多......
到目前为止,我已经编写了以下脚本,如果我使用每行只有一个单词的文件,它可以完美运行,因此我可以轻松更改以下格式的文件
aaa
bbb
ccc
这是批处理文件:
@echo off
setlocal enabledelayedexpansion
if not exist "%1" (echo this file does not exist...)&goto :eof
for /f "tokens=* delims=" %%a in (%1) do (
set write=%%a
if "%%a"=="%2" set write=%3
echo !write!
(echo !write!)>>%~n1.replaced%~x1
)
del %1
rename %~n1.replaced%~x1 %1
我的问题是我需要更改的大多数文件都包含多个字符串和数字值的行,如下所示:
AAA 1.5
BBB 25
CCC 0.1
谁能告诉我为什么我的脚本不会将BBB 25更改为BBB 45?与分隔符是空格有关吗?我很确定它与数字无关,好像我有一个单词文件,只是用空格分隔,我的脚本也不起作用。
我一直在搜索论坛,还没有发现这个问题,但我会继续搜索。无论如何,您的帮助将不胜感激。
更新
问题解决了!!我在DosTips.com上找到了BatchSubstitute.bat 的这个修订版,只需在临时文件中添加一个额外的回声就解决了我的问题。我仍然不确定为什么我发布的代码不起作用所以如果有人能解释它会很棒。我对这一切还是很陌生!
更新 2
这是我需要更改的典型输入文件:
k1 1e3
k2 2e5
n 1.5
x 10
在我运行脚本(replace.bat prefs.txt“k1 1e3”“k1 5e4”)之后,它应该是:
k1 5e4
k2 2e5
n 1.5
x 10
它应该能够更改文件中的任何行。上次更新论坛里的版本好像能用,就是不知道为什么我发的第一个版本不能用。