使用简单的 cmd 命令从 .txt 文件中删除换行符?

使用简单的 cmd 命令从 .txt 文件中删除换行符?

如何.txt使用简单的 cmd 命令从文件中删除换行符?

  • 这将删除该文件:

    findstr "{\r\n}" %USERPROFILE%\Desktop\tt\t.txt %USERPROFILE%\Desktop\tt\t.txt > t.txt
    
  • 但这会增加无用的信息:

    findstr "." %USERPROFILE%\Desktop\tt\t.txt %USERPROFILE%\Desktop\tt\t.txt > t.txt
    

答案1

您指定了两次输入文件,因此您的数据也加倍了。

如果目的是删除空行,那么正确的命令就很合适:

findstr "." "%USERPROFILE%\Desktop\tt\t.txt" > t.txt

只需确保当前文件夹不是%USERPROFILE%\Desktop\tt,否则您将覆盖输入文件。您也可以为输出文件指定完整路径。

以下帖子可能也有帮助:
如何使用批处理或 PowerShell 从文本文件中删除换行符

为了完全删除所有换行符,我使用了以下脚本:

@echo off
setlocal EnableDelayedExpansion
set row=
for /f %%x in (test.txt) do set "row=!row!%%x"
echo %row% >newfile.txt
echo %row%

上述脚本的运行方式如下:

在此处输入图片描述

答案2

您可以做的一件事是获取一些 unix/linux/*nix 命令,然后使用标准的“tr”命令,互联网上到处都是示例。tr -d '\r\n' < input.txt > output.txt将删除 \r 字符和 \n 字符以及任何 \r\n 序列(或任何 \n\r 序列,尽管不应该有这样的序列)。Cygwin 有一些命令。xxd 命令也很好,可以查看文件中到底有什么。Cygwin 包括它。

因为答案表明可以使用 findstr,所以没问题。但如果我发现自己必须使用 cmd.exe“for”命令做一些非常令人困惑的事情,那么我会寻找 *nix 风格的命令,它可能有比“for”更简单的东西,例如“tr”!

注意- 一些评论者(例如 ItWasn'tMe)不知道您可以在 cygwin shell 之外的 cmd.exe 中使用 cygwin 命令,但您可以。尽管如此,OP 还是评论说他正在寻找本机解决方案,但 OP 应该在他的问题中提出这一点。

答案3

FOR /F "tokens=*" %i IN (t.txt) DO @echo|set /p="%i" >> t2.txt

  • FOR /F "tokens=*" %i IN (t.txt) ..将逐行处理txt文件,%i即整行。
  • @echo|set /p="%i"将回显该行而不使用新行 (来源)。
  • >> t2.txt会将所有输出复制到一个新文件(正如OP所要求的那样,由于所有换行符都被删除,因此有效地将所有行连接成一行)。

结果:

C:\Users\me\Documents>type t.txt
some line
SOME OTHER LINE
>
lolwut
Some Person
SOMEBUSINESS

SomeBusiness after an empty line
Users
Line with "quotes"
Wow look at this weird characters ÎøÎñÎ[{()}]ÖοÎö neat!
C:\Users\me\Documents>FOR /F "tokens=*" %i in (t.txt) do @echo|set /p="%i" >> t2.txt

C:\Users\me\Documents>type t2.txt
some lineSOME OTHER LINE>lolwutSome PersonSOMEBUSINESSSomeBusiness after an empty lineUsersLine with "quotes"Wow look at this weird characters ÎøÎñÎ[{()}]ÖοÎö neat!
C:\Users\me\Documents>

如果您需要输出文件与输入文件相同,则可以使用(movecopytype >或...) 。在单个文件中的示例:t2.txtt.txt.cmd

@ECHO OFF
FOR /F "tokens=*" %i IN (t.txt) DO @echo|set /p="%i" >> t2.txt
MOVE /Y t2.txt t.txt

答案4


((Get-Content ${Env:USERPROFILE}'\Desktop\tt\t.txt' -Raw) -replace "(?m)^\s*`r`n",'').trim() | Set-Content .\t.txt


  • 但这会增加无用的信息:
  • findstr "." %USERPROFILE%\Desktop\tt\t.txt %USERPROFILE%\Desktop\tt\t.txt> t.txt

事实上,上面的命令可以完成这项工作,但是,我认为这不起作用,而且我还假设你的user name有空间(“化合物名称“ == ”伊莱莎·哈宾斯基“)


  • 这使得你的命令看起来像这样的布局:
findstr "." c:\Users\Elisha Habinsky\Desktop\tt\t.txt c:\Users\Elisha Habinsky\Desktop\tt\t.txt

1)使用引号"%USERPROFILE%\Desktop\tt\t.txt"%USERPROFILE%\Desktop\tt\t.txt"> t.txt

2)不需要使用引号regex:"."

3)这个. 表示任意字符,还有空格、制表符。

4) 如果您的文件中只有带制表符的行?空白行并非 100% 空白,因此这些行也会保存到文件输出中!

5)考虑使用t.tmp文件来完成这项工作。

6)我建议你使用这里最后几行代码中的 bat 代码,只需复制这些行并保存为file.cmd,该脚本会删除任意一行中所有空白或非空白的制表符。


>.\t.txt findstr . "%USERPROFILE%\Desktop\tt\t.txt"

rem :: or ::

findstr . "%USERPROFILE%\Desktop\tt\t.txt"  >.\t.txt


对于只有制表符的行:


  • 对于命令行(一行):
for /f "delims= " %T in ('robocopy /L . . /njh /njs')do set "_tab=%T" && findstr . .\t.txt >"%temp%\t.tmp" && >.\t.txt (for /f tokens^=* %i in ('type "%temp%\t.tmp"^|find /v "%_tab%"')do @echo/%i) && del /q "%temp%\t.tmp"

  • 对于批处理/cmd 文件:
@echo off && SetLocal EnableDelayedExpansion

for /f "delims= " %%T in ('robocopy /L . . /njh /njs')do set "_tab=%%T"
findstr . "%USERPROFILE%\Desktop\tt\t.txt" >"%temp%\t.tmp"

>.\t.txt (for /f tokens^=* %%i in ('type "%temp%\t.tmp"
')do set "_line=%%~i"&& cmd /v/c echo/!_line:%_tab%=!
) && >nul del /q "%temp%\t.tmp" && endlocal
.\t.txt && exit /b || goto :eof

抱歉我的水平有限英语

相关内容