1

在尝试将文件从 Windows 传输到 Unix Azure 环境时,我收到错误 dos2unix 格式错误

dos2unix -o /xyz/home/ABC_efg.txt 执行dos2unix格式更改失败。

我试图运行一个 PS 脚本来修复它,但似乎确实有效。

Get-ChildItem -File -Recurse *.txt | % { $x = get-content -raw -path $_.fullname; $x -replace "`r`n","`n" | set-content -NoNewline -path $_.fullname }
4

2 回答 2

0

好吧,部分问题是您正在将一个字符串传递给Set-Content然后尝试使用该字符串来确定保存文件的位置。尝试更改最后一部分:

$x -replace "`r`n","`n" | set-content -NoNewline -path $_.fullname

对此:

set-content -NoNewline -path $_.fullname -value ($x -replace "`r`n","`n")

如果这没有像您期望的那样更新格式,您可能需要使用-Encoding参数 for Set-Content. 不过,我对编码并不熟悉,所以我不确定。

于 2019-12-12T20:12:44.873 回答
0

而不是使用-replace,我更愿意将内容读取为字符串数组并将这些字符串与“`n”连接起来。
像这样的东西:

$files = Get-ChildItem -File -Recurse -Filter '*.txt' | Select-Object -ExpandProperty FullName
$files | ForEach-Object { 
    (Get-Content -Path $_) -join "`n" | Set-Content -Path $_ -NoNewline -WhatIf
}

-WhatIf如果您对控制台中显示的输出感到满意,请移除开关。

于 2019-12-14T15:36:59.453 回答