如何.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>
如果您需要输出文件与输入文件相同,则可以使用(move
或copy
或type >
或...) 。在单个文件中的示例:t2.txt
t.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
抱歉我的水平有限英语