我想要一个批处理脚本在文件的所有行中插入逗号,但最后只有一个单词,最后只有一个单词和最后一个单词。逗号应该替换单词之间的空格。
E.g。测试文件:
This is first line
This is the second line
Check Subsystem version 3.1.8-11P
我希望输出看起来像:
This is,first,line
This is the,second,line
Check Subsystem,version,3.1.8-11P
这个脚本在最后一个单词之前插入逗号,但我和&之间有一行。并删除该行与&其中的符号。
E.g。 创建&删除版本1.1.1
此行已被删除。
@echo off
for /f usebackq^ delims^=^ eol^= %%A in ("Doc.txt") do (
set "s=%%A"
set "s1=%%A"
setlocal enableDelayedExpansion
set "s=!s:@=@a!"
set "s=!s:\=@b!"
set "s=!s:/=@f!"
set "s=!s:.=@d!"
set "s=!s: =.!"
for /f "delims=" %%A in (".!s!") do (
endlocal
set "s=%%~xA"
setlocal enableDelayedExpansion
if defined s (
set "s=!s:.= !"
set "s=!s:@d=.!"
set "s=!s:@f=/!"
set "s=!s:@b=\!"
set "s=!s:@a=@!"
set "s=!s:~1!"
call set s2=%%s1:!s!=%%
echo !s2!,!s! >> output.txt
)
endlocal
)
)
pause
而且我也不确定如何将逗号插入到最后但只有一个单词。
答案 0 :(得分:1)
通过搜索
,支持正则表达式的任何文本编辑器都可以轻松完成
\W+(\w+)\W+(\w+)$
并使用替换字符串,$1,$2
。
How can you find and replace text in a file using the Windows command-line environment?在一个答案中包含指向 Dave Benham 编写的JREPL.BAT的最新版本的链接,这使得可以使用正则表达式对文件进行此修改搜索和替换字符串。
在批处理文件中使用 JREPL.BAT ,并将此附加批处理文件放在与执行的批处理文件相同的目录中:
call "%~dp0jrepl.bat" "\W+(\w+)\W+(\w+)$" ",$1,$2" /F "%~1" /O -
"%~1"
在此通用命令行中引用要修改的文件的名称。
运行jrepl.bat /?
以获取有关此处使用的其他选项的帮助。
运行call /?
以获取有关此命令的帮助和%~dp0
的说明(当前批处理文件的驱动器和路径以反斜杠结尾)。
正则表达式替换的说明:
\W+
...根据Unicode标准找到1个或多个非单词字符。(\w+)
...根据Unicode标准找到1个或多个 word 字符,并在替换字符串中用$1
标记找到的字符串以进行反向引用。\W+
...根据Unicode标准再次找到1个或多个非单词字符。(\w+)
...根据Unicode标准再次找到1个或多个 word 字符,并在替换字符串中使用$2
标记找到的字符串以进行反向引用。$
...只有在行尾可以找到两个单词时,搜索表达式才会产生正匹配,从而不会匹配换行符。对于像
这样的行Check Subsystem version 3.1.8-11P
应修改为
Check Subsystem,version,3.1.8-11P
根据Unicode标准,在文件中需要使用不同的正则表达式搜索字符串,因为.
和-
是非单词字符。
必须将搜索字符串修改为:[^\w.\-]+([\w.\-]+)[^\w.\-]+([\w.\-]+)$
[
... ]
是正字符类定义,匹配方括号内指定的任何字符。
[^
... ]
是一个负字符类定义,匹配方括号中指定的任何字符不。
\w
是根据Unicode标准对所有单词字符的特殊字符类定义。
.
被解释为文字字符。 dot字符在字符类定义之外的正则表达式搜索字符串中具有特殊含义。
-
表示所有字符从字符X指定为-
到字符Y根据字符X和Y的代码值指定-
的权限。如果字符类中的-
左侧或右侧没有字符,则hyphen也被解释为文字字符定义。但是,当连字符应被解释为文字字符时,建议在字符类定义中使用反斜杠转义-
,而不考虑其在括号内的位置。在字符类定义之外,连字符没有特殊含义。
因此,用于包含带点和连字符的字符串的文件的整个命令行应该被解释为“单词”:
call "%~dp0jrepl.bat" "[^\w.\-]+([\w.\-]+)[^\w.\-]+([\w.\-]+)$" ",$1,$2" /F "%~1" /O -