Seite 1 von 1

[gelöst] Wie kann man ZIP-Archive mit Powershell extrahieren; relative Pfade und Pfade mit Leerzeichen?

Verfasst: 16.03.2020, 13:05
von Holgi
Ich komme da irgendwie nicht weiter.
Ich möchte mit Windows Boardmitteln ein ZIP-Archive extrahieren.
Die grundsätzliche Vorgehensweise ist bekannt und funktioniert:
PowerShell Expand-Archive -Path "Full path of ZIP" -DestinationPath "Full path of folder to extract all"

Wie aber funktioniert das ganze mit relativen Pfaden (z.B. %homepath%\Downloads) und/oder Pfaden mit Leerzeichen (z.B. C:\Users\Darth Vader\Downloads\meine Testdateien\Test.zip)?
Ich habe schon mit einfachen Anführungszeichen und invoke experimentiert, aber bislang keinen Erfolg gehabt.
Kennt sich da jemand aus?

Re: Wie kann man ZIP-Archive mit Powershell extrahieren; relative Pfade und Pfade mit Leerzeichen?

Verfasst: 16.03.2020, 13:26
von DK2000
Das liegt an der Syntax.

%homepath% ist die Syntax für die Eingabeaufforderung. Die sollte man in der Powershell nicht verwenden.

$env:userprofile ist in dem Falle die Schreibweise für die Powershell:

"$env:userprofile\Downloads" sollte auf C:\Users\<Benutzer>\Downloads zeigen.

Im Grunde genommen müssen alle Umgebungsvariablen über $env: verarbeitet werden.

Und nur nebenbei: Das sind auch "absolute" Pfade, nur ein Teil des Pfades ist in einer Variable abgelegt. Relative Pfade ist das mit den Punkten, also z.B. .\ (bleibe in dem Verzeichnis), ..\ (gehe ein Verzeichnis höher), ..\..\ (gehe zwei Verzeichnisse höher) usw. Aber das nur nebenbei.

Re: Wie kann man ZIP-Archive mit Powershell extrahieren; relative Pfade und Pfade mit Leerzeichen?

Verfasst: 16.03.2020, 13:52
von Holgi
das klappt leider so nicht.
Der Befehl:
powershell Expand-Archive -Path "$env:userprofile\Downloads\PortableAppz.zip" -DestinationPath C:\Temp\PortableAppz\
ergibt die Fehlermeldung:
Expand-Archive : Es wurde kein Positionsparameter gefunden, der das Argument "VADER\Downloads\PortableAppz.zip"
akzeptiert.
Das User-Verzeichnis hat den Namen "Darth Vader"

Re: Wie kann man ZIP-Archive mit Powershell extrahieren; relative Pfade und Pfade mit Leerzeichen?

Verfasst: 16.03.2020, 14:17
von DK2000
Ach siehst, die Sache mit den Leerzeichen ganz ignoriert, ich pöser Purche:

Code: Alles auswählen

-Path "'$env:userprofile\Downloads\PortableAppz.zip'"
Wenn das auch nicht geht, gehe ich zum Kühlschrank.

Re: Wie kann man ZIP-Archive mit Powershell extrahieren; relative Pfade und Pfade mit Leerzeichen?

Verfasst: 16.03.2020, 18:00
von Holgi
super! Dankeschön! Den Weg zum Kühlschrank kannst du dir sparen.
funktioniert mit dem doppelten u n d einfachen Anführungszeichen auch für das Zielverzeichnis.
z.B.

Code: Alles auswählen

powershell Expand-Archive -Path "'$env:userprofile\Downloads\PortableAppz.zip'" -DestinationPath "'C:\Temp\Darth Vader\PortableAppz\'" 
Gibt es eigentlich einen Befehl zwecks Auflistung oder im Internet eine Aufstellung, welche Environment Variablen mit Powershell zulässig sind?

Re: Wie kann man ZIP-Archive mit Powershell extrahieren; relative Pfade und Pfade mit Leerzeichen?

Verfasst: 16.03.2020, 18:07
von DK2000
Ja, sollte mit Quell und Zielverzeichnis funktionieren und auch mit eigenen Pfaden, die man in Variablen definiert und Leerzeichen enthalten.

Code: Alles auswählen

Get-ChildItem env:
Entspricht in der Eingabeaufforderung set

Wobei man hier auch noch anmerken muss, das es von Cmdlet zu Cmdlet unterschiedlich ist mit den Pfaden und den Leerzeichen. Das ist leider nich teinheitlich gelöst:

Bei Get-ItemProperty -Path '"C:\Program Files\*"' funktioniert das mit dem ' und " nicht, hier muss es einfach nur Get-ItemProperty -Path "C:\Program Files\*" bzw. dementsprechend Get-ItemProperty -Path "$env:ProgramFiles\*" heißen, also nur die ".

Re: Wie kann man ZIP-Archive mit Powershell extrahieren; relative Pfade und Pfade mit Leerzeichen?

Verfasst: 16.03.2020, 18:32
von Holgi
ich habe diese hier mal auf die Schnelle zusammengetragen:
$env:userprofile
$env:windir
$env:homedrive
$env:systemroot
$env:windir
$env:username
$env:temp
$env:systemdrive
$env:programdata
$env:ALLUSERSPROFILE
$env:homedrive
$env:homepath
$env:PUBLIC

was bei mir mit einer Fehlermeldung quittiert wird ist
$env:ProgramFiles(x86)
obwohl dieses mit dem Get-ChildItem env: so ausgeworfen wird:
ProgramFiles(x86) C:\Program Files (x86)
gebe ich in der Powershell

Code: Alles auswählen

cd $env:ProgramFiles(x86)
ein, erhalte ich die Fehlermeldung

Code: Alles auswählen

x86 : Die Benennung "x86" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren
Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und
wiederholen Sie den Vorgang.

Re: Wie kann man ZIP-Archive mit Powershell extrahieren; relative Pfade und Pfade mit Leerzeichen?

Verfasst: 16.03.2020, 18:59
von Ben
Für "Program Files (X86)" ist die Variable so zu schreiben.

Code: Alles auswählen

 cd "${Env:ProgramFiles(x86)}"

Re: Wie kann man ZIP-Archive mit Powershell extrahieren; relative Pfade und Pfade mit Leerzeichen?

Verfasst: 16.03.2020, 19:00
von DK2000
Dadurch das Sonderzeichen im Variablen-Namen enthalten sind, muss das dann so aussehen:

Code: Alles auswählen

 cd ${env:ProgramFiles(x86)}
Bzw. für Expand-Archive dann so:

Code: Alles auswählen

Expand-Archive -Path "${env:ProgramFiles(x86)}\a1234.zip" ....
Wobei ich gerade mal getestet habe:

Code: Alles auswählen

Expand-Archive -Path "${env:userprofile}\Downloads\a1234.zip" ...
Geht auch.

Gibt da verschiedene Möglichkeiten, das zu schreiben.

Re: Wie kann man ZIP-Archive mit Powershell extrahieren; relative Pfade und Pfade mit Leerzeichen?

Verfasst: 16.03.2020, 19:06
von Holgi
Danke DK2000 und BEN! :dankeschoen:
Das Thema kann meinethalben als gelöst markiert werden.

Re: [gelöst] Wie kann man ZIP-Archive mit Powershell extrahieren; relative Pfade und Pfade mit Leerzeichen?

Verfasst: 16.03.2020, 19:07
von moinmoin
Bei der langen Überschrift hab ich es mal davor gesetzt. ;)