[POSH] function call faalt wanneer Var brackets bevat

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Wimmel
  • Registratie: Februari 2001
  • Laatst online: 08:10
Ik heb een script gemaakt dat recursief door een folderstructuur wandelt. Het script werkt maar gaat stuk wanneer één van de onderliggende foldernamen brackets bevat. Op dat moment stop het script met de volgende foutmelding:
code:
1
2
3
4
5
Recurse : D:\test\test[4] is an invalid path.
At D:\Persoonlijk\Scripting\Powershell\dir_test.ps1:15 char:14
+       Recurse <<<<  $file.FullName
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Recurse
Dit gedrag is verklaarbaar, zie http://technet.microsoft.com/en-us/library/ff730956.aspx, brackets maken onderdeel uit van de range operator waardoor het scriptt het folderpath niet juist interpreteert. Er worden oplossingen geboden die helaas niet bruikbaar lijken in mijn script.

Directory-structuur in testomgeving:
D:\TEST
├───test
├───test2
├───test3
└───test[4]

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function Recurse ([string]$path){
  if (-not (Test-Path $path)) {
    Write-Error "$path is an invalid path."
    return $false
  }

  $files = @(dir -literalPath $path)
  if ($files -like $extension){
  #hier ga ik wat doen
    }

  foreach ($file in $files) {
    if ($file.attributes -eq "directory"){
      Write-Output $file.FullName
      Recurse $file.FullName
    }
  }
}

$extension = "*.txt"
recurse "d:\test"


Heeft iemand misschien een idee, hoe ik de variable mee kan geven aan de functie, zonder dat de call valt over de brackets. Ik maak in mijn script al gebruik van -literalpath dus de functie zelf ondervindt geen hinder van de brackets in de foldernaam.

edit:

tekst verduidelijkt

[ Voor 4% gewijzigd door Wimmel op 12-01-2012 12:04 ]

Men are from Mars, women are meteors crashing into Mars.
Discogs


Acties:
  • 0 Henk 'm!

  • Wimmel
  • Registratie: Februari 2001
  • Laatst online: 08:10
Even in reactie op mijzelf. Het is opgelost. Ondanks dat de foutmelding verwees naar regel 15, heeft een aanpassing in regel 2 ervoor gezorgd dat het script nu werkt.

code:
1
if (-not (Test-Path -literalpath $path)) {


Met dank aan een collega.

Men are from Mars, women are meteors crashing into Mars.
Discogs