如何定义一种格式以通过 PowerShell 从文本文件中查找 UNC 路径?

How to define a format to find UNC path form a text file through PowerShell?

我只想从文本文件中获取 UNC 路径。 UNC 路径总是以字符和数字结尾,如 P100R101E000

有时 UNC 路径以某些字符或符号结尾,例如

\Localhost\apps\data\logs\P100###

我尝试了不同的方法来获取以 \ 开头并以 P100 0R R101 等结尾的字符串。但是,无法通过 PowerShell 完成此任务。请帮忙。

如果UNC路径是\Localhost\apps\data\logs\P100###\Localhost\apps\data\logs\P100Target,那么我只需要\Localhost\apps\data\logs\P100通过我的脚本。必须删除任何多余的字符或符号。

使用-replace操作:

# Sample paths
$paths = 
  '\Localhost\apps\data\logs\Q102###',
  '\App.Abc.test.test\apps\GS\Data\PKG-SCCM\GoogleChrome_19.012.20034_MUI_E100###',
  '\App.Abc.test.test\apps\GS\Data\PKG-SCCM\Flashplayer_19.012.20034_MUI_R101[Target]'

$paths -replace '(?<=\[^\]*[A-Z]\d{3})[^\]+$'

注意:使用-creplace而不是-replace来匹配大小写-敏感,这样只有大写(英文)字母匹配。默认情况下,PowerShell 通常不区分大小写

要将以上内容应用于 file 输入(文件中的各个行),请使用类似
(Get-Content file.txt) -replace '...'

以上结果(请注意,输入字符串中 Q102E100R101 之后的内容已被删除):

\Localhost\apps\data\logs\Q102
\App.Abc.test.test\apps\GS\Data\PKG-SCCM\GoogleChrome_19.012.20034_MUI_E100
\App.Abc.test.test\apps\GS\Data\PKG-SCCM\Flashplayer_19.012.20034_MUI_R101

-replace 操作仅考虑输入路径的 last 组件,因此适用于任何路径,只要最后一个组件前面有 \.

regex passed to -replace and the ability to experiment with it, see this regex101.com page的解释。

如果您有每个文本文件的路径,您可以使用 Split-Path。

Split-Path -Path "\UNC\Folder\Folder\P100\Example.txt" -Parent

PowerShell: Split-Path