Jump to content

PS - Path beschneiden


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

ich habe einen Path Bsp.:

 

D:\ebene1\ebene2\ebene3\

 

Momentan schreib ich rekursiv alle Dateien die in eine txt rein die sich in dem Path befinden.

 

Kann z.B. so aussehen:

 

D:\ebene1\ebene2\ebene3\datei.txt

D:\ebene1\ebene2\ebene3\1\datei.txt

D:\ebene1\ebene2\ebene3\2\datei.txt

D:\ebene1\ebene2\ebene3\3\img\datei.jpg

 

Jetzt möchte ich immer ab ebene3 den Path einbinden:

 

Bsp.:

\ebene3\datei.txt

\ebene3\1\datei.txt

\ebene3\2\datei.txt

\ebene3\3\img\datei.jpg

 

Wie beschneide ich den Path unabhängig wo das Ganze liegt?

Wenn z.B. eben2 wegfällt...

D:\ebene1\ebene3\2\datei.txt

 

Ich möchte das Script gerne dynamisch haben das ich das hinkopieren kann ohne einen Path zum Beschneiden von Hand eintragen zu müssen.

 

MfG

bearbeitet von SeroSoft
Link zu diesem Kommentar

Ok anders formulieren...

 

ebene3 als ordnername sehen und nicht als feste Ebene!

 

Ich versuche es anhand eines anderen Beispiels:

 

D:\folder1\folder2\folder3

 

Jetzt möchte ich immer folder3 egal wo der abgelegt ist ausgeben.

 

D.h. wenn jetzt die stuktur so aussieht:

 

D:\folder1\folder3

 

Dann muss die Ausgabe trotzdem noch ab folder3 anzeigen. Bei deinem Beispiel ist es fix und würde in dem Fall einen Fehler bringen da folder3 nicht mehr an ebene3 ist. Ich möchte aber, dass das ganze funktioniert egal an welcher Stelle das Ganze liegt.

Link zu diesem Kommentar

@Blub

 

Der Ansatz ist genau das was ich brauche. Nur wie bekomm ich das in meinem Einzeiler unter?

 

gci "..\_TEMPC" -recurse | where-object {$_.Mode -ne "d----"} | foreach { "Source: " + $_.fullname + "; DestDir: ""{app}" + $_.fullname.split("_TEMPC")[-1] + """"  } | Add-Content "..\_TEMP\export.txt"

 

So funktioniert das nur teilweise. Der nimmt mir jetzt diverse Zeichen aus dem String und fäng wo anders an.

 

Aus:

G:\folder1\_TEMPC\FAQ_Main.txt

 

wird:

Source: G:\folder1\_TEMPC\FAQ_Main.txt; DestDir: "{app}ain.txt"

 

und es sollte heißen:

Source: G:\folder1\_TEMPC\FAQ_Main.txt; DestDir: "{app}\FAQ_Main.txt"

 

Das ist mir jetzt aber am liebsten :-) Selbst ne Lösung gefunden!

 

LÖSUNG:

gci "..\_TEMPC" -recurse | where-object {$_.Mode -ne "d----"} | foreach { "Source: " + $_.fullname + "; DestDir: ""{app}" + [color="Red"]$_.fullname.substring($_.fullname.indexof("_TEMPC",0)+6)[/color] + """"  } | Add-Content "..\_TEMP\export.txt"

 

MfG

bearbeitet von SeroSoft
Link zu diesem Kommentar

Hallo,

2 Anmerkungen zu deiner Lösung, wenn du gestattest:

 

ab einer gewissen Länge werden Einzeiler doch unübersichtlich. Hast du schonmal Funktionen angesehen?

 

get-help about_functions

 

Um Ordner bzw. Files zu filtern, ist die Property "PsIscontainer" m.W. üblicher:

where-object {$_.PsIsContainer -ne $true} 

 

cu

blub

bearbeitet von blub
Link zu diesem Kommentar

Auszug aus Seite 429:

Because Dir retrieves directories as well as files, it can sometimes be important to limit the result of

Dir only to files or only to directories. There are several ways to do this. You can either validate the

attribute of the returned object, the PowerShell PSIsContainer property, or the object type:

# List directories only::

Dir | Where-Object { $_ -is [system.IO.DirectoryInfo] }

Dir | Where-Object { $_.PSIsContainer }

Dir | Where-Object { $_.Mode.Substring(0,1) -eq "d" }

# List files only:

Dir | Where-Object { $_ -is [system.IO.FileInfo] }

Dir | Where-Object { $_.PSIsContainer -eq $false}

Dir | Where-Object { $_.Mode.Substring(0,1) -ne "d" }

The first variant (controlling object types) is the fastest by far while the latter (text comparison) is more complex and slower as a result of it complexity.

 

http://powershell.com/Mastering-PowerShell.pdf

bearbeitet von Cybquest
Noch'n Link hinzugefügt :)
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...