我遇到问题&替换已写入的批处理脚本。我需要能够打开一个文本文件,并从Windows命令行中更改它的一些值。我无法安装sed.exe或FART或PowerShell,所以我需要这样做。 它是如此容易得多,在linux做....查找并替换不符合空格的脚本/每行多个值
到目前为止,我已经写了这以下scrtipt如果我使用的只有每行一个字一个文件,它完美的作品,所以我可以很容易更改以下格式的文件
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?这是否与分隔符是一个空间有关?我很确定它与数字无关,就好像我有一个由空格隔开的单词文件,我的脚本也不会工作。
我一直在搜索论坛,并没有发现这个问题,但我会继续搜索。无论如何,您的帮助将不胜感激。
UPDATE
问题解决了!我在DosTips.com上发现了BatchSubstitute.bat的this revision,只是在临时文件中添加额外的回应已解决了我的问题。我仍然不确定为什么我发布的代码不起作用,因此如果有人能够解释它会很好。所有这些我都很新!
更新2
这里有我需要从改变一个典型的输入文件:
K1 1E3
K2 2E5
ñ1.5
×10
并经过我运行脚本(replace.bat prefs.txt“k1 1e3”“k1 5e4”)应该是:
K1 5E4
K2 2E5
N1。5
×10
它应该能够改变任何行的文件中。在上次更新的论坛版本似乎能够工作,我只是不知道为什么我发布的第一个版本不起作用。
+1陈述良好的问题和“它是如此容易...”。祝你好运。 – shellter 2012-07-06 14:37:08
哈哈,谢谢。我其实刚刚尝试了[另一篇文章]中提到的dostips.com中的BatchSubstitute.bat(http://stackoverflow.com/questions/60034/how-can-you-find-and-replace-text-in-一个文件 - 使用 - 的 - 窗口的命令行-ENVIR)。在我的Windows 7机器上,它会显示替换的文本,但不覆盖文件,但在XP机器上,我需要这个工作,它根本不工作。需要以某种方式将两个文件拼接在一起。 – jpmorr 2012-07-06 15:01:26
你可以编辑你的文章,包括显示输入和输出的示例运行?或者你只需要'...设置写入“%3”'(注意dbl-quotes)。祝你好运。 – shellter 2012-07-06 15:52:34