PDA

View Full Version : [POWERSHELL] Problema annidamento


Albiz849
29-11-2013, 08:56
Ciao!
Ho creato il seguente script per spostare cartelle vuote
$Move=@()
$Et1="0"
$Et2="9"
$Today = Get-Date -Format "dd-MMM"
$Folder= "C:\Estinto\$Today\EmptyFolders"
$Search= "C:\Test"

if(!(Test-Path $Folder)){
New-Item -Path $Folder -ItemType directory
}

Get-ChildItem $Search -Recurse |
Where-Object {(Get-ChildItem -Path $_.FullName) -eq $null -and $_.PSISContainer} |
foreach($_){
$Sav=Split-Path($_) -leaf
if($Sav.StartsWith($Et1) -or $Sav.StartsWith($Et2)){}
else{
$Mem=$_
$Move=$Move+$Mem.fullname
$Divide=$Mem.Parent.fullname -split('')
$Impera=""
foreach($count in $divide){
if($count -match ':'){
$count="$"
}
$Impera += $count
}
$Dest=$Folder,$impera -join('\')
if(!(Test-Path $Dest)){
New-Item -Path $Dest -ItemType directory
}


Move-Item -Path $Mem.FullName -Destination $Dest -force
}
}
Proprietà delle cartelle, al momento, è che non devono cominciare con 0 e 9... se volessi aumentare il numero di eccezioni e scrivere tutte le eccezioni in un array come posso procedere?
Se facessi un foreach($i in $etc){if($Sav.StartsWith($i))........}non avrebbe senso poiché cambierebbe completamente la logica del programma...
Magari un while(...){if($Sav.StartsWith(...))....} potrebbe rendere meglio l'idea...
Al momento aggiungo un paio di eccezioni in maniere bruta(if(A -or B -or C -or D){}) ma spero di poter giungere a una scrittura migliore... :-)
Grazie
A

Albiz849
29-11-2013, 11:47
Tentando di darmi delle risposte per quanto scritto sopra mi sono imbattuto in questo get-help about_break
$var = "parola2"
switch -regex ($var)
{
"parola2"
{
Write-Host "Esatto" $_
break
}

"parola.*"
{
Write-Host "Corrispondenza con prefisso" $_
break
}

"p.*"
{
Write-Host "Corrispondenza almeno con la prima
lettera" $_ break
}

default
{
Write-Host "Nessuna corrispondenza" $_
break
}
}
Che ne pensate? mi sembra possa adattarsi in qualche modo o sbaglio?