首页 > 解决方案 > 如何在 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

标签: regexpowershellreplacesyntax

解决方案


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

相反,问题在于-replace运算符是基于正则表达式的,|因此被解释为正则表达式元字符(表示交替)。

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

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

反过来,这要求您-NoNewLine在(重新)写入文件时使用开关。此外,出于性能原因,最好使用文本输入。Set-ContentOut-File

把它们放在一起:

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

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

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

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


推荐阅读