如何使用批处理文件将字符替换为换行符



例如,我有一行

2054721111*2054721111*2054721111*2054721111

现在,我想将"*"字符替换为新行。

如果我希望使用批处理文件的输出是这样的,该怎么办?

2054721111*
2054721111*
2054721111*
2054721111
@echo off
    setlocal
    set "data=2054721111*2054721111*2054721111*2054721111"
    Rem Option 1 - first count how many elements there are in the string
    Rem            and then loop over them
    setlocal enableextensions disabledelayedexpansion
    for /f %%n in (
        'cmd /q /u /c "echo(%data%"^|find /c "*"'
    ) do for /l %%i in (0 1 %%n) do (
        setlocal enabledelayedexpansion
        for /f "tokens=1,* delims=*" %%a in ("!data!") do ( 
            endlocal
            set "data=%%b"
            if defined data (echo(%%a*) else (echo(%%a)
        )
    )
    endlocal
    Rem Option 2 - without counting the number of elements
    setlocal enableextensions disabledelayedexpansion
    cmd /q /v:on /e:on /c "for /l %%l in () do if not defined data (exit) else for /f "tokens=1,* delims=*" %%a in ("!data!") do (set "data=%%b" & if defined data (echo %%a*) else echo %%a)"
    endlocal

两个代码都显示了相同的想法:在for /f循环中使用*作为分隔符,输出第一个标记,并将行的其余部分保存为输入变量。继续处理,直到所有令牌都得到响应。

第一个代码块对数据中的感叹号没有任何问题(如果它们可能存在的话),但第二个代码块可能会使失败

使用Notepad++,只需执行以下操作:

Ctrl-F,选择替换标签,然后:

查找内容:*
替换为:n

点击Replace all

最新更新