Я сталкиваюсь с очень странным поведением моего скрипта Powershell. Я получаю значения из документа PDF через Word как ComObject. Получение значений работает нормально и это не проблема, но как только я пытаюсь объединить две переменные, которые я получил из документа, после объединения их одна из них отсутствует. Сначала я подозревал, что это была проблема с подчеркиванием, но после опробования всех возможных форм экранирования, таких как `_ или $ {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 ответ1

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"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .