Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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
Windows 如何在文件的所有行中的最后一个单词前插入逗号?_Windows_Batch File - Fatal编程技术网

Windows 如何在文件的所有行中的最后一个单词前插入逗号?

Windows 如何在文件的所有行中的最后一个单词前插入逗号?,windows,batch-file,Windows,Batch File,我想要一个批处理脚本,在文件的所有行中插入逗号,从左到右,最后一个单词,最后一个单词和最后一个单词之间。逗号应替换单词之间的空格 例如,测试文件: 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 这个脚本在最后一个

我想要一个批处理脚本,在文件的所有行中插入逗号,从左到右,最后一个单词,最后一个单词和最后一个单词之间。逗号应替换单词之间的空格

例如,测试文件:

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
这个脚本在最后一个单词前插入逗号,但我在中间有一行,其中有&和它删除的那行中有&符号

例如,创建和删除版本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

而且我也不知道如何从左到后插入逗号,只插入一个单词。

任何支持正则表达式的文本编辑器都可以通过搜索
\W+(\W+)\W+(\W+)$
并用作替换字符串
,$1,$2

在一个答案中包含Dave Benham编写的最新版本的链接,该链接使使用正则表达式搜索和替换字符串对文件进行此修改成为可能

要从批处理文件中使用JREPL.BAT,此附加批处理文件与执行的批处理文件位于同一目录中:

call "%~dp0jrepl.bat" "\W+(\w+)\W+(\w+)$" ",$1,$2" /F "%~1" /O -
“%~1”
在此通用命令行中引用要修改的文件名

运行
jrepl.bat/?
获取此处使用的其他选项的帮助

运行
call/?
以获取此命令的帮助以及
%~dp0
的解释(当前批处理文件的驱动器和路径以反斜杠结尾)

正则表达式替换的说明:

  • \W+
    。。。根据Unicode标准查找一个或多个非单词字符
  • (\w+)
    。。。根据Unicode标准查找一个或多个单词字符,并在将字符串替换为
    $1
    中标记找到的字符串以供反向引用
  • \W+
    。。。根据Unicode标准再次查找一个或多个非单词字符
  • (\w+)
    。。。根据Unicode标准再次查找一个或多个单词字符,并在“用
    $2替换字符串”中标记找到的字符串以供反向引用
  • $
    。。。只有在换行符不匹配的行尾可以找到两个单词时,搜索表达式才会产生正匹配

对于像这样的一行

Check Subsystem version 3.1.8-11P
应该修改为

Check Subsystem,version,3.1.8-11P
根据Unicode标准,文件中需要不同的正则表达式搜索字符串,因为
-
非单词字符

搜索字符串必须修改为:
[^\w.\-]+([\w.\-]+)[^\w.\-]+([\w.\-]+)$

[
..
]
是与方括号内指定的任何字符匹配的正字符类定义

[^
..
]
是一个负数字符类定义,与方括号内指定的任何字符不匹配

\w
是根据Unicode标准对所有word字符的特殊字符类定义

正负字符类定义的方括号内的
被解释为文字字符。字符在字符类定义之外的正则表达式搜索字符串中具有特殊含义

-
在正负字符类定义的方括号内,表示根据字符X和Y的代码值从
字符X向左指定到
-字符Y向右指定到-的所有字符。如果在字符类定义中,
-
的左侧或右侧都没有字符。但是,当连字符应解释为文字字符时,建议在字符类定义中使用反斜杠转义
-
,而不依赖于其在括号中的位置。在字符类定义之外,连字符没有特殊含义

因此,用于包含带点和连字符的字符串(应解释为“字”)的文件的整个命令行是:


您需要我们帮助的Windows批处理文件在哪里?帮助别人和帮助别人是有区别的,因为现在看来,你的要求是后者,因此在这里是离题的。
call "%~dp0jrepl.bat" "[^\w.\-]+([\w.\-]+)[^\w.\-]+([\w.\-]+)$" ",$1,$2" /F "%~1" /O -