使用批处理文件替换字符(替代SED)

时间:2018-05-23 12:40:36

标签: batch-file replace notepad

我想通过批处理将文本文件中的所有,替换为.

实际上我只需要这个命令的替代方案

sed.exe "s/,/./g" $clearances.txt$ > $clearance_out.txt$

问题是我想在每台PC上都没有安装sed.exe所以我打算用Windows中的标准记事本编辑器阅读和替换。

有谁知道怎么做?

clearances.txt的例子:

-12,7
-5,6
-7,6
-3,9

2 个答案:

答案 0 :(得分:1)

您可以通过以下方式执行此操作(使用与您的sed等效的批处理文件):

将文件命名为replace_string.bat

@echo off 
    setlocal enableextensions disabledelayedexpansion

    set "search=,"
    set "replace=."

    set "textFile=clearances.txt"

    for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
        set "line=%%i"
        setlocal enabledelayedexpansion
        >>"%textFile%" echo(!line:%search%=%replace%!
        endlocal
    )

首先,我们要确保禁用延迟扩展(使for魔法工作)。接下来设置要搜索的变量和文件。

然后在循环中我使用type来显示文件的内容。然后^用于转义& (run first command and then second)>(重定向)。

然后将循环变量%%i(双%%因为我们在批处理文件中存在)保存到line变量中,以便我们可以使用它。然后我们需要enable delayedexpansion,以便我们可以使用!...!

棘手的部分是echo(!line:%search%=%replace%!

echo(通常打印空行。在这里,您需要将其用于line变量扩展。如果没有它,你会得到类似的东西:

  

'行:'不被视为内部或外部命令

所以我们在那里(感谢扩展)12,7:,=.导致最终结果12.7

答案 1 :(得分:1)

您可以使用PowerShell代替sed

从批处理文件:

@PowerShell "(GC .\clearances.txt)|%%{$_ -Replace ',','.'}|SC .\clearances.txt"

在命令提示符下

PowerShell "(GC .\clearances.txt)|%{$_ -Replace ',','.'}|SC .\clearances.txt"