我想通过批处理将文本文件中的所有,
替换为.
。
实际上我只需要这个命令的替代方案
sed.exe "s/,/./g" $clearances.txt$ > $clearance_out.txt$
问题是我想在每台PC上都没有安装sed.exe
所以我打算用Windows中的标准记事本编辑器阅读和替换。
有谁知道怎么做?
clearances.txt的例子:
-12,7
-5,6
-7,6
-3,9
答案 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"