批处理文件,用于删除txt文件中每行的前缀和后缀

时间:2016-12-11 08:42:45

标签: batch-file text-files command-prompt



我有一个txt文件包含一些具有常量结构的行, 例如:

My Line is : Hi. This is row no.1.
My Line is : Hi. This is row no.2
My Line is : Hi. This is row no.3.

我想创建一个包含相同行的新文件, 但要删除特定子字符串之前的所有字符(例如:“Hi”),
以及此行的最后一个特定字符(例如:“。”),仅在存在时。

我期望的最终txt文件是:

Hi. This is row no.1
Hi. This is row no.2
Hi. This is row no.3

我该怎么做?

2 个答案:

答案 0 :(得分:0)

在批处理中,使用SET命令完成字符串替换和子字符串提取。使用set /?help set进行查找。但是,使用SET时,字符串中可能存在一些问题,包括!,因为此解决方案使用延迟扩展。有些方法不会使用延迟扩展,但如果没有您正在使用的字符串的真实示例,我不确定您是否需要它们。

字符串替换看起来像这样。

%VARIABLE:original=replacement%

使用延迟扩展,允许为for中的每次迭代确定变量值,而不是在整个for块的开头确定一次,将%替换为!

查看HELP SET子字符串扩展的示例;根据您是从字符串的开头还是结尾进行索引,它们中有许多。

根据您提供的示例数据和我上面的评论,这是一个解决方案。对于test1.txt中的每一行,它处理它并将其输出到output.txt。

@echo off & setlocal enabledelayedexpansion
for /f "delims=" %%a in (test1.txt) do (
    set line=%%a
    set line=!line:My Line is : =!
    if "!line:~-1!"=="." set line=!line:~0,-1!
    >> output.txt echo !line!
)

答案 1 :(得分:-1)

cut
    cut -f2 -d:infile> OUTFILE

但是留下了尾随点,
可以管那些东西来修剪它

或尝试sed

sed 's/.*:\(.*\)\.$/\1/g' infile > outfile

但是真的希望最终的点在那里。

sed 's/.*: \(.*\)/\1/g;s/\.$//g' infile > outfile

似乎这样做