如何使用批处理或PowerShell从文本文件中删除换行符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用批处理或PowerShell从文本文件中删除换行符相关的知识,希望对你有一定的参考价值。
基本上,我想从file.txt中读取内容
apple banana carrot
并写入newfile.txt,以便它有内容
apple banana carrot
我需要在没有安装权限的Windows计算机上执行此操作。
我试过了
set row=
for /f %%x in (file.txt) do set row=%row% %%x
echo row > newfile.txt
我尝试使用PowerShell语句(我无法运行PowerShell脚本)而不是CMD风格的for
循环。
powershell -Command "(Gc file.txt) | Foreach-Object -Process {set row=%row% _$} | Out-File newFile.txt"
但两者都产生一个空文件。有没有办法做到这一点?
Get-Content
将文件的内容作为行数组返回,并且已经删除了换行符,因此您需要做的就是(在PowerShell中)加入行并将结果写回文件:
(Get-Content 'input.txt') -join ' ' | Set-Content 'output.txt'
不推荐,但如果你必须批量执行此操作,则需要以下内容:
@echo off
setlocal EnableDelayedExpansion
set row=
for /f %%x in (file.txt) do set "row=!row! %%x"
>newfile.txt echo %row%
请注意,此操作需要延迟扩展。如果没有它,循环体中的%row%
将在解析时扩展(当变量仍为空时),因此在循环完成后,您将最终得到变量中输入文件的最后一行。在启用延迟扩展(并使用!row!
而不是%row%
)的情况下,变量在运行时扩展,即在循环迭代期间扩展,正如人们通常所期望的那样。
有关延迟扩展的更多信息,请参阅Raymond Chen's blog。
补充Ansgar Wiechers' helpful answer:
从批处理文件/ cmd.exe
控制台窗口执行以下命令应该可以执行以下操作:
powershell -command ""$(Get-Content file.txt)" > newFile.txt"
- 注意嵌入的
"
作为"
的转义,PowerShell在从外部调用时需要(相比之下,PowerShell内部,`
是转义字符)。 - 使用子表达式运算符
Get-Content file.txt
将$(...)
调用(以双引号字符串形式输出一行)包含在内,意味着数组元素每个都隐式连接一个空格。
但请注意,PowerShell的输出重定向运算符>
默认创建UTF16-LE(“Unicode”)编码文件,Out-File
也是如此(至少在Windows PowerShell中;跨平台PowerShell核心默认为(无BOM) UTF-8)。
要控制输出编码,请使用-Encoding
参数,该参数可以应用于Out-File
,或者最好 - 知道正在输出字符串 - Set-Content
。
在Windows PowerShell中,请注意Set-Content
- 与>
/ Out-File
相反 - 默认为传统“ANSI”代码页隐含的编码,通常为Windows-1252。
以上是关于如何使用批处理或PowerShell从文本文件中删除换行符的主要内容,如果未能解决你的问题,请参考以下文章
PowerShell5。查找/替换文本。 Switch和.NET框架或cmdlet和管道?哪个更快?哪个更容易阅读?
如何从PowerShell /批处理文件中的网络路径运行命令
如何将 PowerShell 树输出到文本或 Excel 文件
使用 VBA 或 PowerShell 将所有 MS Access SQL 查询导出到文本文件