如何使用Powershell Out文件获取$style文件结尾

如何使用Powershell Out文件获取$style文件结尾,powershell,Powershell,我的行结尾有问题。我有一个git跟踪的文件。然后我尝试使用PowerShell使用$content | Out file$location重新创建该文件,git正在跟踪以EOF结尾的行中的更改 如果在终端中,我运行文件。/somefile.sql(该文件已在git中) 我得到一个输出/somefile.sql ASCII文本,带有CRLF行终止符 运行cat-ve./somefile.sql 文件的最后两行显示 ^M$ END^M$#“END”是文件中的实际文本 如果在终端中,我运行文件。/d

我的行结尾有问题。我有一个git跟踪的文件。然后我尝试使用PowerShell使用
$content | Out file$location
重新创建该文件,git正在跟踪以EOF结尾的行中的更改

如果在终端中,我运行
文件。/somefile.sql
(该文件已在git中) 我得到一个输出
/somefile.sql ASCII文本,带有CRLF行终止符

运行
cat-ve./somefile.sql
文件的最后两行显示

^M$
END^M$#“END”是文件中的实际文本
如果在终端中,我运行
文件。/dupfile.sql
(由PowerShell创建的文件) 我得到一个输出
/dupfile.sql ASCII文本,带有CRLF、LF行终止符

运行
cat-ve./dupfile.sql
文件的最后两行显示

^M$
完美元
如果我将文件更改为使用
$content | Out File$location-NoNewLine
并再次检查
dupfile
输出,我会得到:
ASCII文本,带CRLF行终止符
……但是

^M$
完%
如何使用
Out File
写入
$content
并获得一个类似git的
^M$
结尾?

使用以下命令(假设
$content
包含一个字符串):

上面的解决方案假定
$content
是一个单行多行字符串,并向其附加一个CRLF序列(表示为
“`r`n”
,一个带有转义序列的字符串),然后使用
-NoNewLine
将其按原样写入目标文件。 请继续阅读背景信息


如果您知道自己在处理字符串,则性能优于

两个cmdlet显示相同的换行符处理(尽管它们的默认字符编码在Windows PowerShell中有所不同,幸运的是,PowerShell(Core)7+中不再使用(无BOM)UTF-8):

  • 对于多个输入对象,保存时在(字符串化)对象之间插入平台本机换行符序列,即Windows上的CRLF,Unix上的LF-如
    [Environment]::newline所示

  • 默认情况下,会附加一个后续平台本机换行符

关于
-NoNewLine

  • -NoNewLine
    不仅抑制尾随换行符,还抑制多个输入对象之间的换行符(如果适用)

  • 如果输入是单个多行字符串,则可以使用
    -NoNewLine
    将其按原样写入文件(这意味着该字符串的尾随换行或不换行状态保持原样)。但是,对于多个字符串,您可以在不使用分隔符的情况下有效地实现字符串连接

请注意,它有一个
-Delimiter
参数,用于
输出文件
设置内容
/
添加内容

建议引入此参数,这将允许您根据需要请求使用非本机换行符序列,例如Unix上的
-Delimiter“`r`n”
,Windows上的
-Delimiter“`n”

Set-Content -NoNewLine $location -Value ($content + "`r`n")