【问题标题】:How to remove newlines from a text file with batch or PowerShell如何使用批处理或 PowerShell 从文本文件中删除换行符
【发布时间】:2017-12-27 22:54:43
【问题描述】:

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

苹果 香蕉 胡萝卜

并写入 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"

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

【问题讨论】:

  • 好吧,第一个不起作用,因为您将 row 设置为空值,从不将 %%x 分配给 row(这会使 row 为空),然后将空行写入文件。你认为for %%x in 是什么意思?
  • findstr /v "^$" File1.txt > File2.txt
  • 我以为是文件中的每一行。
  • @ACatInLove 这只会从输入中删除空白行,据我了解,这不是 OP 想要的。
  • 是的,但是你忽略了这条线(根本不使用它)。同样,您认为for %%x in 中的%%x 是什么意思? %%x 是每一行,所以你必须使用该行的内容。你的尝试没有这样做。

标签: string powershell batch-file file-io cmd


【解决方案1】:

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。

【讨论】:

【解决方案2】:

致补充 Ansgar Wiechers' helpful answer:

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

powershell -command "\"$(Get-Content file.txt)\" > newFile.txt"
  • 注意嵌入的" 转义为\",这是 PowerShell 在从外部调用时需要的(相比之下,PowerShell-在内部,@ 987654326@ 是转义字符)。

  • 使用子表达式运算符将Get-Content file.txt 调用(输出数组行)包含在双引号字符串中> $(...),表示数组元素隐式以空格连接。

但请注意,PowerShell 的输出重定向运算符 > 默认创建 UTF16-LE(“Unicode”)编码文件,Out-File 也是如此(至少在 Windows PowerShell 中; 跨平台的 PowerShell Core 默认为(BOM-less)UTF-8)。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多