Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理文件,用于删除txt文件中每行的前缀和后缀_Batch File_Text Files_Command Prompt - Fatal编程技术网

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

Batch file 批处理文件,用于删除txt文件中每行的前缀和后缀,batch-file,text-files,command-prompt,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



我有一个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
我如何才能做到这一点?

使用
cut

挖方-f2-d:填充>输出文件

但这留下了后面的点,
可以用管道把它修一下吗

或者尝试
sed

sed 's/.*:\(.*\)\.$/\1/g' infile > outfile
但这真的期望最后一个点在那里

sed 's/.*: \(.*\)/\1/g;s/\.$//g' infile > outfile
似乎是用
cut
挖方-f2-d:填充>输出文件

但这留下了后面的点,
可以用管道把它修一下吗

或者尝试
sed

sed 's/.*:\(.*\)\.$/\1/g' infile > outfile
但这真的期望最后一个点在那里

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

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

字符串替换看起来像这样

%VARIABLE:original=replacement%
延迟扩展允许在
for
中为每次迭代确定变量值,而不是在整个
for
块的开始时确定一次,将
%
替换为

查看
帮助集
,了解子字符串扩展的示例;根据您是从字符串的开头还是结尾进行索引,它们有很多

根据您提供的样本数据和我上面的评论,这里有一个解决方案。对于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!
)

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

字符串替换看起来像这样

%VARIABLE:original=replacement%
延迟扩展允许在
for
中为每次迭代确定变量值,而不是在整个
for
块的开始时确定一次,将
%
替换为

查看
帮助集
,了解子字符串扩展的示例;根据您是从字符串的开头还是结尾进行索引,它们有很多

根据您提供的样本数据和我上面的评论,这里有一个解决方案。对于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!
)

标准批处理文件脚本可能无法作为一般请求执行此任务。你不太可能得到一个解决方案,你只需要交换字符和子字符串,并维护一个工作脚本。为了以合理的稳健性执行此任务,我们需要查看文本文件内容的实时示例,正确了解真实的特定子字符串,并提供最后一行字符的真实示例。请分享您的努力!使用:
jrepl“^.*(=Hi.)\.$”/t“/f old.txt/o new.txt
标准批处理文件脚本可能无法作为一般请求执行此任务。你不太可能得到一个解决方案,你只需要交换字符和子字符串,并维护一个工作脚本。为了以合理的稳健性执行此任务,我们需要查看文本文件内容的实时示例,正确了解真实的特定子字符串,并提供最后一行字符的真实示例。请分享您的努力!使用:
jrepl“^.*(=Hi.)\.$”“/t”“/f old.txt/o new.txt
有没有在Windows中执行此操作的建议?[batch file]标记为Windows-exclusive。Windows无法声明批次文件,因为其使用时间早于此。此外,尽管你可能陷入了一种“排外”的心态,但bash并不是。运行一两次web搜索,找到本机支持bash的windows,让自己摆脱这种习惯。干杯我不是微软的用户,所以我不能真正提出建议,但cygwin年纪大了,可能要求太高,也许尝试一下吧,这与我的心态无关。我完全同意“批处理文件”不是Windows批处理标签的好名字;我更希望看到“ms batch”或“windows batch”之类的东西,但据我所知,标记名是不能更改的。此外,在某些环境中,例如在工作场所,安装第三方软件甚至大幅更改Windows配置可能不是一种选择。请考虑一下,我们中的一些人可能比你更少的选择。在Windows中有什么建议吗?[batch file]标记为Windows-exclusive。Windows无法声明批次文件,因为其使用时间早于此。此外,尽管你可能陷入了一种“排外”的心态,但bash并不是。运行一两次web搜索,找到本机支持bash的windows,让自己摆脱这种习惯。干杯我不是微软的用户,所以我不能真正提出建议,但cygwin年纪大了,可能要求太高,也许尝试一下吧,这与我的心态无关。我完全同意“批处理文件”不是Windows批处理标签的好名字;我更希望看到“ms batch”或“windows batch”之类的东西,但据我所知,标记名不能是