我正在处理一个文本文件(名为list_names.txt
),其中包含以逗号分隔的值:
"old_name.pdf","new_name.pdf" "old_name2.pdf", "new_name2.pdf" ...
new_name列值应该包含字母后跟数字(例如:abcd_12.pdf
),但其中一些记录错误,只包含下划线后的数字(例如:_12.pdf
)。 / p>
我想创建一个错误日志,记录所有带有此错误的行,并尝试为其编写脚本。
$myHeader = echo OldName NewName
$csv = Import-Csv $PSScriptRoot\list_names.txt -Header $myHeader
foreach ($line in $csv) {
if ($line.NewName -eq "`"`_[0-9]*.pdf`"") {
Add-Content -Path $PSScriptRoot\ocr_error.txt -Value "ERROR reading $line.FileName"
}
}
当我运行它时,ocr_error.txt
没有输出。
答案 0 :(得分:4)
您需要使用-Match
并将您的RegEx更改为'^_\d*\.pdf$'
。您还需要使用子表达式运算符$()
来访问Error输出行中$line
变量的属性:
$myHeader = echo OldName NewName
$csv= Import-Csv $PSScriptRoot\list_names.txt -Header $myHeader
Foreach ($line in $csv) {
if ($line.NewName -match '^_\d*\.pdf$') {
Add-Content -path $PSScriptRoot\ocr_error.txt -Value "ERROR reading $($line.OldName)"
}
}
-Match
比较运算符允许您使用正则表达式,而-Eq
则不允许。
您不需要在RegEx中加入语音标记,因为它们会被Import-CSV
自动删除。
根据Ansgar的评论,RegEx模式'^_\d*\.pdf$'
确保它仅匹配字符串,其中_
位于字符串的开头,后跟任意数量的数字(现在由正则表达式令牌表示) \d
而不是数字范围)并以.pdf
结尾(其中\
需要继续.
以阻止它被解释为RegEx令牌。