如何使用批处理或PowerShell从文本文件中删除换行符

cod*_*rE1 3 string powershell file-io cmd batch-file

本质上,我想从file.txt中读取内容

苹果
香蕉
胡萝卜

并写入newfile.txt,使其包含内容

苹果香蕉胡萝卜

我需要在没有安装权限的Windows计算机上执行此操作。

我试过了

set row=
for /f %%x in (file.txt) do set row=%row% %%x
echo row > newfile.txt
Run Code Online (Sandbox Code Playgroud)

并且我尝试使用PowerShell语句(无法运行PowerShell脚本)而不是CMD样式的for循环。

powershell -Command "(Gc file.txt) | Foreach-Object -Process {set row=%row% _$} | Out-File newFile.txt"
Run Code Online (Sandbox Code Playgroud)

但都产生一个空文件。有没有办法做到这一点?

Ans*_*ers 5

Get-Content 以换行符的形式返回文件的内容,其中的换行符已被删除,因此(在PowerShell中)您需要做的就是加入这些换行符并将结果写回到文件中:

(Get-Content 'input.txt') -join ' ' | Set-Content 'output.txt'
Run Code Online (Sandbox Code Playgroud)

不建议这样做,但是如果必须分批执行此操作,则需要这样的操作:

@echo off
setlocal EnableDelayedExpansion
set row=
for /f %%x in (file.txt) do set "row=!row! %%x"
>newfile.txt echo %row%
Run Code Online (Sandbox Code Playgroud)

请注意,此功能需要延迟扩展。如果没有它%row%,则循环主体将在解析时进行扩展(当变量仍为空时),因此循环结束后,您将只得到变量中输入文件的最后一行。启用延迟扩展(并使用!row!代替%row%)后,变量将在运行时扩展,即在循环迭代中,如通常所期望的那样。

有关延迟扩展的更多信息,请参见Raymond Chen的博客