如何使用批处理或PowerShell从文本文件中删除新线



本质上,我想从file.txt上阅读contents

苹果香蕉胡萝卜

并写入newfile.txt,以便它具有内容

苹果香蕉胡萝卜

我需要在没有安装权限的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%

请注意,延迟的扩展是所需的才能正常工作。没有IT IT %row%在循环主体中将在解析时间扩展(当变量仍然为空时),因此在循环完成后,您最终只能从变量中的输入文件中获得最后一行。启用了延迟的扩展(以及使用!row!而不是%row%),变量在运行时进行扩展,即在循环迭代期间正常期望。

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

to repredment ansgar wiechers的有用答案:

从批处理文件/cmd.exe控制台窗口执行以下命令应执行您想要的工作:

powershell -command ""$(Get-Content file.txt)" > newFile.txt"
  • 请注意,嵌入式 "的逃避为 ",powershell从外部称为时需要的(相反,powershell- internally `是逃生角色)。

  • 使用 suppression $(...)封闭了 Get-Content file.txt调用 - 在 double quoted String 中输出 array - ,意味着数组元素与每个空间连接在一起。

但是,请注意,PowerShell的输出还原运算符>,默认情况下创建UTF16-LE(" Unicode")编码文件,Out-File也是如此(至少在 Windows powershell中; crosshell; cross---平台powershell core 默认为(bom-bom-bom-eutf-8)。

要控制输出编码,请使用-Encoding参数,您可以将其应用于Out-File或最好 - 知道正在输出 strings 正在输出-Set-Content

在Windows PowerShell中,请注意Set-Content-与>/Out-File相比 - 默认为遗留" ANSI"代码页面所隐含的编码,通常是Windows -Windows -1252。

最新更新