简体   繁体   中英

Get-ChildItem not finding files

I am trying to recursively find files in folders, I have gotten the file names into an Array but the Get-ChildItem doesn't find the files. I can replace the $ImageNames variable with an actual string name and it finds them. So I know there is something wrong with the variable, but I can't pinpoint what it is. Here is a snip of the script.

I have tried to break the array into a foreach, but I get the same result with the single string.

Current output of $ImageNames from Write-Output of $imageNames
TEST_###_DPm.X.1.2.840.113681.2886735633.1532516094.5056.994912425400525861.dcm
TEST_###_DPm.X.1.2.840.113681.2886735633.1532516094.5056.996112425422850002.dcm
TEST_###_DPm.X.1.2.840.113681.2886735633.1532516094.5056.997312425470276903.dcm

Updated per advice, but still not working

foreach ($xmlFile in $sumReportArray)
    {

        $outputDirectory = $patientDir
        $subDirPerXML = Split-Path -Path $xmlFile -Leaf -Resolve
        $finalDir = $outputDirectory + '\' + $subDirPerXML
        [xml]$XmlDocument = Get-Content $xmlFile

        New-Item -ItemType Directory -Force -Path $finalDir | Out-Null
        $imageNames = $XmlDocument.VOLPARA_SERVER_INTERFACE.VolparaDicomSummaryReport.VolparaInputs.Image | Select-Object -ExpandProperty ImageFileName 
        Get-ChildItem -LiteralPath $volparaPath -include $imageNames -Recurse | Copy-Item -Destination $finalDir
    }

Here is the error I get...

 Get-ChildItem : Illegal characters in path. At C:\\Users\\AdamZenner\\OneDrive - Volpara Health Technologies Limited\\1 Volpara\\Production Software\\Script_VolparaServerSearch\\VolparaServerSearch_1.0.ps1:90 char:13 + Get-ChildItem -recurse -Path ($volparaPath) -filter ($ima ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (C:\\Program File...araServer\\DATA\\:String) [Get-ChildItem], ArgumentException + FullyQualifiedErrorId : DirArgumentError,Microsoft.PowerShell.Commands.GetChildItemCommand 

The output of ... | Select ImageFileName | Out-String ... | Select ImageFileName | Out-String ... | Select ImageFileName | Out-String contains unnecessary strings. (Header, Separator, etc.)

So you should use Select-Object -ExpandProperty .

$imageNames = … | Select-Object -ExpandProperty ImageFileName

But in this case it is enough to use dot access.

and if $imageNames is an array, use -Include parameter instead of -Filter parameter.

$imageNames = $XmlDocument.VOLPARA_SERVER_INTERFACE.VolparaDicomSummaryReport.VolparaInputs.Image.ImageFileName
Get-ChildItem -Path $volparaPath -Include $imageNames -Recurse | Copy-Item -Destination $finalDir

Simply remove the parenthesis () from all your variables and it should work.

New-Item -ItemType Directory -Force -Path ($finalDir)

to

New-Item -ItemType Directory -Force -Path $finalDir

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM