如何在 powershell 中指定特定文件名?

How do i specify a specific file name in powershell?

我对 Powershell 很陌生。我有一个 csv 文件,我想用它来查找和替换一些文本。经过一番搜索,这似乎很简单,但我似乎仍然对代码有问题:

$csv = get-content .\test.csv
$csv = $csv -replace "|", "$"
$csv | out-file .\test.csv

我的文件位于:C:\Users\CB1\test.csv 如何在 powershell 中指定该位置?

我试过了,但没用:

$csv = get-content C:\Users\CB1\test.csv
$csv = $csv -replace "|", "$"
$csv | out-file C:\Users\CB1\test.csv

问题不在于您使用的是相对路径还是绝对路径(假设您的相对路径是相对于正确目录的)。

相反,问题在于基于 operator is regex,因此|被解释为正则表达式元字符(代表交替)。

因此,您需要使用 \ 转义 此类元字符(或者,如果您以编程方式执行此操作,则可以使用 [regex]::Escape()方法)。

此外,由于您的替换操作不是特定于行的,您可以通过使用-Raw将文件作为一个整体读入内存来加快操作速度]开关。

这反过来要求您在(重新)写入文件时使用 -NoNewLine 开关。 此外,使用 text 输入,Set-Content is preferable to Out-File 出于性能原因。

总而言之:

(Get-Content -Raw .\test.csv) -replace '\|', '$' | Set-Content -NoNewLine .\test.csv

注意:根据需要使用 -Encoding 参数,因为 input 文件的编码将 not 被接受:

  • Windows PowerShell 中,Out-File 默认生成 UTF-16LE(“Unicode”)文件,而 Set-Content 使用系统的 ANSI 代码页。

  • PowerShell (Core) 7+ 中,无 BOM UTF-8 是一致应用的默认值。