【问题标题】:How to close file created with cat in PowerShell如何在 PowerShell 中关闭使用 cat 创建的文件
【发布时间】:2021-11-21 05:36:57
【问题描述】:

我正在使用 Windows PowerShell 并创建一个文件

cat > test

输入后,我可以输入文件的内容。 但是,如何关闭文件/终止文件test 的内容写入?在基于 Unix 的系统上,这将是 ctrl + D,但这似乎不适用于 Windows 上的 PowerShell...

【问题讨论】:

  • 在 Windows PowerShell 中,catGet-Content 的别名(比 cat 更接近 type)。您不能像在 unix shell 中那样使用它从标准输入读取文本
  • @MathiasR.Jessen 那么我将如何创建包含一些文本内容的文档呢?像 UNIX 系统上的 cat > file 一样?
  • 我通常在here-string literal 的提示符中写入多行文本,然后通过管道将其传递给Set-Content。 Shift+Enter 用于不执行的换行
  • 请记住,PowerShell 中的管道是 |不是>。所以“在引号之间创建一个字符串(或使用 Mathias 提到的这里字符串作为多行),然后通过管道传输到” |设置内容
  • @DarkMoon, > - Out-File 的有效别名 - 没问题,只要它跟随字符串(尽管值得注意的是,在 Windows PowerShell @ 987654334@和Set-Content默认使用不同的字符编码)。

标签: windows powershell cmd powershell-2.0 cat


【解决方案1】:

充实Mathias R. Jessen's对该问题的评论:

Windows PowerShell 中,catloosely 等效的 Get-Content cmdlet 的别名;然而,Get-Content 只对文件起作用。

您可以使用here-string 以交互方式键入要保存到文件的内容(像往常一样在每行后按 Enter):

Set-Content test @'
type
your
lines
here
'@    # Type this to finish and save - must be at the *very start* of the line.

如果您想在键入的行中引用 变量和表达式,请使用 expandable(插值)here-string 变体,它使用 "而不是'

注意:

  • 以交互方式,您将看到以 >> 为前缀的第二行和所有后续行,这是 PowerShell 表示正在键入的命令尚未完成的方式。

  • Set-Content 用于保存到文件(通常更适合将 text 保存到文件); Windows PowerShell 中的警告是它使用系统的活动 ANSI 代码页来创建文件(而 PowerShell (Core) 7+ 现在值得称道的是始终默认为(无 BOM)UTF-8);根据需要使用-Encoding 参数。

    • PowerShell 也支持>(和>>),它委托给Out-File cmdlet,因此在 Windows PowerShell 中创建“Unicode”(UTF-16LE)文件。

    • 虽然在语法上一般来说很方便,但如果您要在手头的情况下使用>,您将不得不 - 尴尬地 - 在结束 '@ 分隔符之后键入 > test 这里的字符串,因为 - 与 POSIX 兼容的 shell 不同,例如 bash - > 不能启动命令。

【讨论】:

  • 我不知道 Out-File vs. Set-Content;我现在得换了。
【解决方案2】:

你也可以使用Get-Clipboard

  1. 将要保存的文本复制到文件中。
  2. Get-Clipboard > test

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-10
    • 2021-02-06
    • 2019-03-29
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多