我编写了一个简单的PowerShell脚本,旨在获取文件名,然后将文件移动到特定文件夹中。
有问题的文件是以PDF文档形式扫描的表格。
在文件名中,我定义了一个唯一的字符串,用于帮助识别它是哪个表单,然后我的脚本将文件排序到正确的文件夹中。
我已将文件名捕获为字符串变量。
我使用-match来评估文件名字符串变量,我的问题是匹配就像......好像。
例如,我的脚本在字符串中查找(F1),如果返回true,我的脚本会将文件移动到名为IT帐户请求的文件夹中。
这一切都很有效,直到我的脚本在名称中找到一个带有(F10)的文件,因为'match'将评估字符串并找到F1的匹配项。
如何使用'match'为精确的字符串块返回true?
我知道这可能听起来像一个相当基本的新手问题,但我如何使用-match来区分两种文件类型?
我已经在网上搜索,想要学习如何强制匹配我想做的事情,但也许我需要在这里重新思考并使用“匹配”之外的东西来获得我需要的结果?
感谢您阅读本文的时间。
代码示例:
$Master_File_name = "Hardware Request (F10).pdf"
if ($Master_File_name -match "(F1)"){Write-Output "yes"}
if ($Master_File_name -match "(F10)"){Write-Output "yes"}
两个if语句都返回'yes'
答案 0 :(得分:3)
-match
基于正则表达式匹配您的字符串,这意味着右侧参数是正则表达式模式,而不是文字字符串。
在正则表达式中,(F1)
表示“匹配F和1,并将子字符串捕获为单独的组”。
要匹配文字字符串(F1)
,请手动转义模式:
if($Master_File_Name -match '\(F1\)'){Write-Output 'yes'}
或者使用Regex.Escape()
方法自动完成:
if($Master_File_Name -match [regex]::Escape('(F1)')){Write-Output 'yes'}