Regex match does not produce desired result

Обновить

April 2019

Просмотры

6 раз

0

Этот матч регулярного выражения

$script:lstfilepath = ((Get-Content -path $script:ordfile) | Select-String -pattern "^file\s*=\s*(\\\\.*.lst)").matches.groups[1].value

Производит эту ошибку на файлы, которые не содержат матч, оставив меня поверить, что возвращение является недействительным.

Cannot index into a null array.
At line:1 char:1
+ ((Get-Content -path .\27257055-brtcop.ORD) | Select-String -pattern " ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NullArray

Тем не менее, мой сценарий никогда не прыгает на «другое», то все процессы под «если», даже если нет никакого совпадения.

$script:lstfilepath = ((Get-Content -path $script:ordfile) | Select-String -pattern "^file\s*=\s*(\\\\.*.lst)").matches.groups[1].value
        if (-not ([string]::IsNullOrEmpty($script:lstfilepath)))
         {
          ###LST PROCESS
          Write-Host "LST FILE PRESENT"
          $script:lstpayload = Get-Content $script:lstfilepath |ForEach-Object { ($_ -split '"')[-2] }
           FOREACH ($script:lstfile in $script:lstpayload)
            {
              $script:lstzipshortname = (-join ((48..57) + (97..122) |get-random -count 11 |% {[char]$_}))
              $script:lstzipname = $script:lstzipshortname + ".zip"
              7z a -spf  $script:lstzipname $script:lstfile
            }
         Set-Location $global:ordprocessingpath
         copy-item -Recurse $script:ordprocfolder c:\temp 
         }
         else   
            { 
             ###REGULAR PROCESS
             $script:filepath = ((Get-Content -path $script:ordfile) | Select-String -pattern "^file\s*=\s*(\\\\.*\\)").matches.groups[1].value
             $script:zipshortname = $script:ordfile
             $script:zipname = $script:zipshortname + ".zip"
             7z a -spf $script:zipname $script:filepath
             }

1 ответы

0

If $script:lstfilepath has a previous value, the error produced by your Select-String will not overwrite the value. Therefore, you need to purge the contents of $script:lstfilepath before this code executes or declare it again.