在没有额外软件的情况下替换文本每行中第n个字符串出现

时间:2017-08-16 21:54:20

标签: powershell batch-file text cmd

我想替换每一行的第三个tabkey,并用冒号替换它。 这是通过cmd在Windows中可能的吗?我这样做的大文本文件对于记事本++来说太大了,我想尽可能不安装额外的软件

输入

用户名第一名电子邮件号码

输出

用户名第一名电子邮件:号码

2 个答案:

答案 0 :(得分:0)

由于循环的批处理文件一次处理一行,因此文件大小不重要。运行可能需要一段时间,但应该完成。

TestInput.txt中的测试数据:

one two three   four    five six seven
1   2   3   4   5 6 7
only    two tabs in this line
only    one tab in this line
no tabs in this line
this    line    has 5   tabs    in it

批处理文件使用TestInput.txt

@echo off
if exist TestOutput.txt del TestOutput.txt
SETLOCAL ENABLEDELAYEDEXPANSION

rem /f "tokens=1,2,3,4,* delims=^T" %%A in (TestInput.txt) do (
for /f "tokens=1,2,3,4,* delims=    " %%A in (TestInput.txt) do (
if not "%%D"=="" (
    rem The line has at least 3 tabs

    rem OutputLine=%%A^T%%B^T%%C:%%D^T%%E
    set OutputLine=%%A  %%B %%C:%%D %%E
) else (
    if not "%%C"=="" (
        rem line has 2 tabs
        rem OutputLine=%%A^T%%B^T%%C%%D%%E
        set OutputLine=%%A  %%B %%C%%D%%E
    ) else (
        if not "%%B"=="" (
            rem line has 1 tab
            rem OutputLine=%%A^T%%B%%C%%D%%E
            set OutputLine=%%A  %%B%%C%%D%%E
        ) else (
            rem line has no tabs
            set OutputLine=%%A%%B%%C%%D%%E
        )
    )
)
echo !OutputLine!
echo !OutputLine!>>TestOutput.txt
)
ENDLOCAL
pause
exit

请注意,delims =之后的字符是实际的制表符。确保您的编辑器不用空格替换制表符或使用Notepad.exe作为编辑器。

我不确定论坛帖子如何保存数据,但%% A和%% B,%% B和%% C以及%% C和%% D之间的字符必须是实际标签性格也。

答案 1 :(得分:0)

@echo off
(for /F "tokens=1-5" %%a in (input.txt) do (
   if "%%e" neq "" (
      echo %%a  %%b %%c %%d:%%e
   ) else (
      echo %%a  %%b %%c:%%d
   )
)) > output.txt

请确保在echo命令中插入适当的分隔符:%%a%%c之后的TAB以及%%b之后的空格;或者在第二种情况下%%a%%b之后的TAB ......