我的 Powershell 脚本出现了一些非常奇怪的行为。我通过 Word 作为 ComObject 从 pdf 文档中获取值。获取值工作正常并且没有问题,但是当我尝试连接从文档中获取的两个变量时,连接后其中一个变量丢失了。起初我怀疑是下划线的问题,但在尝试了所有可能的转义形式(例如 `_ 或 ${variable}_)甚至用其他字符(例如空格)替换它之后,我仍然遇到同样的问题。
我可以单独显示变量并且它们返回正确的值,但连接后我得到了一些非常奇怪的行为。
$filepath = "C:\Users\xxxx\Desktop\all_spools\" $wd = New-Object -ComObject Word.Application $wd.Visible = $false $files = Get-ChildItem -path $filepath foreach($file in $files) { $doc = $wd.Documents.Open($file.FullName) if ($doc.tables(1).rows.count -eq 7) { $docnum = $doc.tables(1).Columns(2).cells(2).Range.Text $intdocarr = $doc.tables(1).Columns(2).cells(7).Range.Text $intdocnum = $intdocarr.split(" ") $finalintdocnum = $intdocnum | Select-Object -first 1 $doc.Close() } else { $docnum = $doc.tables(1).Columns(2).cells(2).Range.Text $intdocarr = $doc.tables(1).Columns(2).cells(8).Range.Text $intdocnum = $intdocarr.split(" ") $finalintdocnum = $intdocnum | Select-Object -first 1 $doc.Close() } $filename = "${docnum}_$finalintdocnum.pdf" $filename } $wd.Quit()
我预期的输出应该是“90004234_74503423.pdf”,但实际上我得到的是“_74503424.pdf”。有时它会随机变成“_74503423.pdf90004234”,这是无法重现的。我有点迷茫了。
当使用变量 $docnum 重命名文件时,我收到路径中非法字符的错误,我也尝试删除所有内容并仅使用正则表达式输出数字。
我的问题是,我是否遗漏了什么?我不明白为什么这不起作用。
答案1
如果您通过管道传输$doc.tables(1).Columns(2).cells(2).Range.Text
并clip
粘贴到更具启发性的文本编辑器(我使用的是 Notepad++)中,您会发现捕获了一个您意想不到的 ascii 字符。
$docnum
您可以通过以下方式更改声明排除这些字符,在您的if
和中else
。
$docnum = ($doc.tables(1).Columns(2).cells(2).Range.Text) -replace "[\x00-\x1F]+"
另外,您应该$filename
像这样设置。按照您的方式,下划线将被视为变量名的一部分。
$filename = "$docnum" + "_" + "$finalintdocnum.pdf"