Benutzer mit den meisten Antworten
Get-childitem und -exclude Verzeichnis -include Dateien

Frage
-
Hallo zusammen,
Habe folgende Verzeichnis-Struktur:
--Alles
----Verzeichnis1
----Verzeichnis2
----SortierenHier möchte ich nun die Verzeichnisse und evtl. Unterverzeichnisse von Verzeichnis1 und Verzeichnis2 rekursiv durchsuchen. Das Verzeichnis Sortieren soll ausgeschlossen werden.
$file = get-childitem -recurse -path "W:\Alles" -include *.mp3 ,*.mpc ,*.m4a ,*.ogg ,*.flac ,*.jpeg ,*.m3u ,*.jpg , *.nfo
wird logischerweise auf alle Verzeichnisse angewendet und funktioniert.$file = get-childitem -recurse -path "W:\Alles" -exclude sortieren -include *.mp3 ,*.mpc ,*.m4a ,*.ogg ,*.flac ,*.jpeg ,*.m3u ,*.jpg , *.nfo
sollte nach meinem Verständnis das Verzeichnis Sortieren ausschließen. Funktioniert aber nicht. Nach etwas googeln fand ich einen Kommentar, dass dies ein Bug sei.Kann ich mir fast gar nicht vorstellen, Gibt es hierfür eine Lösung?
Für Hilfe Dankbar,
Sönke
Antworten
-
1. den Punkt "-exclude sortieren" vor der Pipe kann ich mir ja eigentlich sparen, es wird ja eh alles durchsucht, oder? Funktionierte in einem Test jedenfalls.
Ja! Das wird ja durch das Where-Object ersetzt.
2. Mit where-objeckt, $_.Fullname und der Pfadangabe des zu excludierenden Verzeichnisses wird jedes File aus "Sortieren" durchlaufen. (Es wird ja trotz exclude Parameter doch eingelesen). Mit -not und -like wird es dann aber ausgeschlossen, oder?
Ja !
3. Ich kannte bis jetzt immer nur den Operator -notlike, kann ich diese generell trennen, oder muss das in diesem Fall so sein? Wäre es nicht auch mit -notlike gegangen. So sieht es für mich zumindest "komplizierter" aus;-)
Du kannst in diesem Fall auch -Notlike nehmen Where-Object { $_.Fullname -notlike W:\Alles\Sortieren} der Ansatz mit -Not ( Bedingung ) ist aber allgemeingültig (nicht nur bei Like).
Siehe:
Get-Help about_Logical_Operators # LESEN WICHTIG!
4. Was mache ich denn, wenn ich mehrere Verzeichnisse excludieren möchte? Einfaches erweitern um einen weiteren Pfad mit dem Verzeichnis Temp funktioniert jedenfalls nicht:
Auch hier helfen dir die Logischen Operatoren weiter um mehre Bedingungen zu verknüpfen!
$file = get-childitem -recurse -path "W:\Alles" -include *.mp3 ,*.mpc ,*.m4a ,*.ogg ,*.flac ,*.jpeg ,*.m3u ,*.jpg , *.nfo | Where-Object { ($_.FullName -notlike "W:\Alles\Sortieren*") -and ($_.FullName -notlike "W:\Alles\Temp*") }
Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum!
- Bearbeitet Peter Kriegel Freitag, 25. Januar 2013 13:01
- Als Antwort markiert Sönke T Freitag, 25. Januar 2013 13:56
-
Auch bei Microsoft arbeiten "nur" Menschen und Menschen machen Fehler!
PowerShell Bugs und Vorschläge kann man bei Microsoft Connect melden. Schau mal rein wie viele es da schon gibt ;-)
http://connect.microsoft.com/PowerShell
Der Get-ChildItem –Include –Exclude Fehler ist bekannt, dort aber nicht gemeldet. Man kann nur eines von beiden Nutzen aber nicht beides zusammen.
Hier musst du mit Where-Object arbeiten um die Ausgabe selbst zu Filtern.$file = get-childitem -recurse -path "W:\Alles" -exclude sortieren -include *.mp3 ,*.mpc ,*.m4a ,*.ogg ,*.flac ,*.jpeg ,*.m3u ,*.jpg , *.nfo | Where-Object { -not ($_.FullName -like "W:\Alles\Sortieren*") }
Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum!- Als Antwort markiert Sönke T Freitag, 25. Januar 2013 11:37
Alle Antworten
-
Auch bei Microsoft arbeiten "nur" Menschen und Menschen machen Fehler!
PowerShell Bugs und Vorschläge kann man bei Microsoft Connect melden. Schau mal rein wie viele es da schon gibt ;-)
http://connect.microsoft.com/PowerShell
Der Get-ChildItem –Include –Exclude Fehler ist bekannt, dort aber nicht gemeldet. Man kann nur eines von beiden Nutzen aber nicht beides zusammen.
Hier musst du mit Where-Object arbeiten um die Ausgabe selbst zu Filtern.$file = get-childitem -recurse -path "W:\Alles" -exclude sortieren -include *.mp3 ,*.mpc ,*.m4a ,*.ogg ,*.flac ,*.jpeg ,*.m3u ,*.jpg , *.nfo | Where-Object { -not ($_.FullName -like "W:\Alles\Sortieren*") }
Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum!- Als Antwort markiert Sönke T Freitag, 25. Januar 2013 11:37
-
Hallo Peter,
danke, funktioniert! Hast mir wie immer helfen können!
Zum Verständnis:1. den Punkt "-exclude sortieren" vor der Pipe kann ich mir ja eigentlich sparen, es wird ja eh alles durchsucht, oder? Funktionierte in einem Test jedenfalls.
2. Mit where-objeckt, $_.Fullname und der Pfadangabe des zu excludierenden Verzeichnisses wird jedes File aus "Sortieren" durchlaufen. (Es wird ja trotz exclude Parameter doch eingelesen). Mit -not und -like wird es dann aber ausgeschlossen, oder?
3. Ich kannte bis jetzt immer nur den Operator -notlike, kann ich diese generell trennen, oder muss das in diesem Fall so sein? Wäre es nicht auch mit -notlike gegangen. So sieht es für mich zumindest "komplizierter" aus;-)
4. Was mache ich denn, wenn ich mehrere Verzeichnisse excludieren möchte? Einfaches erweitern um einen weiteren Pfad mit dem Verzeichnis Temp funktioniert jedenfalls nicht:
$file = get-childitem -recurse -path "W:\Alles" -include *.mp3 ,*.mpc ,*.m4a ,*.ogg ,*.flac ,*.jpeg ,*.m3u ,*.jpg , *.nfo | Where-Object { -not ($_.FullName -like "W:\Alles\Sortieren*", "W:\Alles\Temp*") }
-
In diesem Fall brauchst du den -or Operator. Zu Deutsch "Oder". Und das erklärt eigentlich schon alles. Ich hoffe es funktioniert so. Ich habe es nicht selber ausprobiert:
$file = get-childitem -recurse -path "W:\Alles" -include *.mp3 ,*.mpc ,*.m4a ,*.ogg ,*.flac ,*.jpeg ,*.m3u ,*.jpg , *.nfo | Where-Object { -not ($_.FullName -like "W:\Alles\Sortieren*" -or $_.FullName -like "W:\Alles\Temp*") }
The following is my signature:Powershell Programmer & Advanced Lua Programmer
Location: Switzerland
Beside that, whenever you see a reply, you think is helpful, click "
Vote As Helpful"! And whenever you see a reply being an answer to the main question of the thread, click "
Mark As Answer" (if you opened the thread).
I published the URL's for the icons in my signature.
Please contact me, before reporting me, thank you.
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('577076797174-87661607769657424-8687168065964').substring(($_*2),2))})-replace' '
-
Du kannst dann beliebig viele "-or"s anhängen. Sollten es zu viele sein, gibt es natürlich auch eine effektivere Lösung.
Hier ein Beispiel mit 3:
$file = get-childitem -recurse -path "W:\Alles" -include *.mp3 ,*.mpc ,*.m4a ,*.ogg ,*.flac ,*.jpeg ,*.m3u ,*.jpg , *.nfo | Where-Object { -not ($_.FullName -like "W:\Alles\Sortieren*" -or $_.FullName -like "W:\Alles\Temp*" -or $.FullName -like "W:\Alles\Test*") }
The following is my signature:Powershell Programmer & Advanced Lua Programmer
Location: Switzerland
Beside that, whenever you see a reply, you think is helpful, click "
Vote As Helpful"! And whenever you see a reply being an answer to the main question of the thread, click "
Mark As Answer" (if you opened the thread).
I published the URL's for the icons in my signature.
Please contact me, before reporting me, thank you.
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('577076797174-87661607769657424-8687168065964').substring(($_*2),2))})-replace' '
-
1. den Punkt "-exclude sortieren" vor der Pipe kann ich mir ja eigentlich sparen, es wird ja eh alles durchsucht, oder? Funktionierte in einem Test jedenfalls.
Ja! Das wird ja durch das Where-Object ersetzt.
2. Mit where-objeckt, $_.Fullname und der Pfadangabe des zu excludierenden Verzeichnisses wird jedes File aus "Sortieren" durchlaufen. (Es wird ja trotz exclude Parameter doch eingelesen). Mit -not und -like wird es dann aber ausgeschlossen, oder?
Ja !
3. Ich kannte bis jetzt immer nur den Operator -notlike, kann ich diese generell trennen, oder muss das in diesem Fall so sein? Wäre es nicht auch mit -notlike gegangen. So sieht es für mich zumindest "komplizierter" aus;-)
Du kannst in diesem Fall auch -Notlike nehmen Where-Object { $_.Fullname -notlike W:\Alles\Sortieren} der Ansatz mit -Not ( Bedingung ) ist aber allgemeingültig (nicht nur bei Like).
Siehe:
Get-Help about_Logical_Operators # LESEN WICHTIG!
4. Was mache ich denn, wenn ich mehrere Verzeichnisse excludieren möchte? Einfaches erweitern um einen weiteren Pfad mit dem Verzeichnis Temp funktioniert jedenfalls nicht:
Auch hier helfen dir die Logischen Operatoren weiter um mehre Bedingungen zu verknüpfen!
$file = get-childitem -recurse -path "W:\Alles" -include *.mp3 ,*.mpc ,*.m4a ,*.ogg ,*.flac ,*.jpeg ,*.m3u ,*.jpg , *.nfo | Where-Object { ($_.FullName -notlike "W:\Alles\Sortieren*") -and ($_.FullName -notlike "W:\Alles\Temp*") }
Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum!
- Bearbeitet Peter Kriegel Freitag, 25. Januar 2013 13:01
- Als Antwort markiert Sönke T Freitag, 25. Januar 2013 13:56