如何在 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 是一致应用的默认值。
我对 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
问题不在于您使用的是相对路径还是绝对路径(假设您的相对路径是相对于正确目录的)。
相反,问题在于基于|
被解释为正则表达式元字符(代表交替)。
因此,您需要使用 \
转义 此类元字符(或者,如果您以编程方式执行此操作,则可以使用 [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 是一致应用的默认值。