【问题标题】:Search and replace with a batch file用批处理文件搜索和替换
【发布时间】:2010-09-19 21:20:27
【问题描述】:

我正在使用 Windows 命令编写一个批处理文件脚本,并且想用“,”更改每次出现的一些空格,最简单的方法是什么?

【问题讨论】:

    标签: command-line batch-file


    【解决方案1】:

    如果您的用户是文本文件中一行的单词列表,以空格分隔,例如:

    one two three four
    

    创建一个批处理文件SpaceToComma.bat,如下:

    @echo off
    setlocal
    for /F "tokens=* delims= " %%a in (%1) do @set data=%%a
    echo %data: =,%
    endlocal
    

    然后运行它,你会得到用逗号分隔的单词。这是你想要的吗?

    C:\>SpaceToComma.bat data.txt
    one,two,three,four
    

    如果你有一个多行文件,那么就可以了:

    数据.txt

    one two three four
    five six seven
    

    SpaceToComma.bat

    @echo off
    setlocal
    for /F "tokens=* delims= " %%a in (%1) do @call :processaline %%a
    endlocal
    goto :eof
    :processaline
    setlocal
    set data=%*
    echo %data: =,%
    endlocal
    goto:eof
    

    输出

    C:\>SpaceToComma.bat data.txt
    one,two,three,four
    five,six,seven
    

    (在没有子例程的情况下可能有一个聪明的方法,使用 !data! 语法进行延迟变量扩展,但我无法使用替换语法。)

    如果这不是您想要的,请解释一下,我可以尽力帮助。

    (PS:我喜欢在人们坚持无法完成的情况下使用批处理文件。)

    【讨论】:

    • 谢谢 PA。答案更正。 (很高兴看到有人仔细阅读。)
    • @RichardA 我在一个 2GB 的 csv 文件中使用了 SpaceToComma.bat 并且工作正常。但是,对于每个空格,它都放置一个逗号,i。例如,2014 12 1 变为 2014,,12,,1。有没有办法识别各种空格并用一个逗号替换? (例如,从 2014 年 12 月 1 日到 2014 年 12 月 1 日)。
    【解决方案2】:

    您可以从http://unxutils.sourceforge.net/ 下载 sed.exe 并运行以下命令:

    sed -e "s/ /,/" infile.txt >outfile.txt
    

    【讨论】:

      【解决方案3】:

      这在很大程度上取决于您如何获取数据,但您可以使用 For-Do 构造来解决问题。将字段分隔符设为空格,然后在每个标记之间用 , 将字符串重新构建到 do 中。我可以建议一种更强大的脚本语言吗?您应该在几乎任何相对现代的 Windows 弓上安装 VBScript。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-24
        • 1970-01-01
        • 2012-03-21
        • 2011-11-17
        • 1970-01-01
        • 1970-01-01
        • 2018-01-14
        相关资源
        最近更新 更多