evinben
Goto Top

ZIP-Archive nach Dateien durchsuchen und Pfade ausgeben

Hallo,

im Windows Explorer ist es möglich nach Dateien in ZIP-Archiven zu suchen (vorausgesetzt die Option zum Suchen in Archiven ist unter den Einstellungen im Explorer gesetzt).
Gibt es eine Möglichkeit die Pfade der gefunden ZIP-Archiven z. B. in eine TXT-Datei auszugeben?
Wenn Windows nach Inhalte in Archiven suchen kann, muss doch logischerweise eine Variante geben, wie das Ergebnis ausgegeben werden kann.

Mit 7-Zip habe ich ebenso probiert (7z.exe l -r "%Path%" "SearchFile"), jedoch ist die Ausgabe sehr umfangreich und mir ist es nicht gelungen nur die Pfade der betroffenen ZIP-Archiven zu extrahieren.

Welche Möglichkeiten via Batch kennt ihr?

evinben

Content-Key: 333171

Url: https://administrator.de/contentid/333171

Ausgedruckt am: 19.03.2024 um 10:03 Uhr

Mitglied: colinardo
Lösung colinardo 25.03.2017, aktualisiert am 26.03.2017 um 11:25:04 Uhr
Goto Top
Servus @evinben,
ich würd's zwar z.B. mit einem Tool wie Treesize oder diversen anderen Suchtools machen, aber wenns programmatisch sein soll, hier z.B. als schnelles Powershell-Skript:
param(
    [parameter(mandatory=$true)][ValidateScript({Test-Path $_})][string]$searchfolder,
    [parameter(mandatory=$true)][ValidateNotNullOrEmpty()][string]$searchstring
)
# Assemblies laden (benötigt mindestens Powershell 3.0)
if ($PSVersionTable.PSVersion.Major -lt 3){write-host "ERROR: Minimum Powershell Version 3.0 is required!" -F Yellow; return}  
Add-Type -AssemblyName System.IO.Compression
Add-Type -AssemblyName System.IO.Compression.Filesystem
gci $searchfolder -Filter *.zip -Recurse -Force -ErrorAction SilentlyContinue | ?{([System.IO.Compression.ZipFile]::OpenRead($_.Fullname).Entries | ?{$_.FullName -like $searchstring})} | select -Expand Fullname
welches man dann so nutzt um einen Ordner mit seinen Unterordnern zu durchsuchen (Suchbegriff mit Wildcards):
powershell -F "C:\Pfad\script.ps1" "C:\Ordner" "*suchbegriff*"
Es gibt auch noch mehr Methoden wie z.B. über das Shell.Application COM-Object. Wenn du willst mach ich dir dazu auch noch ein Beispiel.

Grüße Uwe

-edit-

Hier alternativ noch das PS Skript mit dem Shell.Application-Object (Aufruf wie oben):

param(
    [parameter(mandatory=$true)][ValidateScript({Test-Path $_})][string]$searchfolder,
    [parameter(mandatory=$true)][ValidateNotNullOrEmpty()][string]$searchstring
)
$shell = New-Object -Com Shell.Application
$list = {param($f) $f.Items() | ?{$_.IsFolder} | %{. $list $_.GetFolder};$f.Items() | ?{!$_.IsFolder -and $_.Name -like $searchstring}}

gci $searchfolder -Filter *.zip -Recurse -Force -ErrorAction SilentlyContinue | ?{(. $list $shell.NameSpace($_.Fullname))} | select -Expand Fullname
Und wenn du willst packst du das ganze als Einzeiler in eine Batch
@echo off
powershell -NoProfile -ExecutionPolicy Bypass -Command "$shell = New-Object -Com Shell.Application; $list = {param($f) $f.Items() | ?{$_.IsFolder} | %%{. $list $_.GetFolder};$f.Items() | ?{!$_.IsFolder -and $_.Name -like '%~2'}};gci '%~1' -Filter *.zip -Recurse -ErrorAction SilentlyContinue | ?{(. $list $shell.NameSpace($_.Fullname))} | select -Expand Fullname"  
Welche du dann so aufrufst:
script.cmd "C.\Ordner" "*suchbegriff*"

Also such dir was passendes raus face-wink
Mitglied: evinben
evinben 25.03.2017 um 11:07:07 Uhr
Goto Top
Hallo Uwe face-wink!

Danke dir sehr für die umfangreichen Vorschlägen face-smile - dies hat mich sehr gefreut.

Zuerst habe ich mir gleich das von dir vorgeschlagene Tool "TreeSize" studiert. Die Free-Version unterstützt nicht die Kommandozeilenparameter, daher habe ich mit dem Test dieses Tools nach Dateien in Archiven zu suchen erstmals weggelassen, aber werde es bei Gelegenheit gerne testen.

Als zweitens fange ich ich mit deinem letzten 3. Code-Vorschlag - mit dem Batch-Einzeiler.
Folgende Fehlermeldung erhalte ich beim Ausführung:
Der Befehl kann nicht verarbeitet werden, da der mit "-EncodedCommand" angegebene Wert nicht ordnungsgemäß codiert wurde. Der Wert muss Base64-codiert sein.

Die Batch ist ganz normal erstellt (ANSI kodiert) aber ich werde es mit UTF-8 und ohne BOM versuchen...
Mitglied: colinardo
colinardo 25.03.2017 um 11:15:29 Uhr
Goto Top
Folgende Fehlermeldung erhalte ich beim Ausführung:
Sorry, da habe ich den Parameter etwas zu stark abgekürzt face-smile, ist oben korrigiert.
Mitglied: evinben
evinben 25.03.2017 um 11:43:35 Uhr
Goto Top
ah face-wink, jetzt tritt kein Fehler mehr, aber es kommt keine Datei heraus face-smile.

Könnte die Ausgabe leicht innerhalb der Batch empfangen werden ohne dass du jetzt gleich den ganzen Code ändern muss?
Mitglied: colinardo
colinardo 25.03.2017 aktualisiert um 11:51:33 Uhr
Goto Top
Zitat von @evinben:

ah face-wink, jetzt tritt kein Fehler mehr, aber es kommt keine Datei heraus face-smile.
Doch das gibt die Pfade der Zips im Beispiel oben nur auf der Konsole aus, kannst du ja ganz einfach in eine Datei umleiten, entweder mit Redirection in der Batch oder mit set-content im PS-Code!
Könnte die Ausgabe leicht innerhalb der Batch empfangen werden ohne dass du jetzt gleich den ganzen Code ändern muss?
Klar wie immer. Die Ausgabe einfach mit >"Datei.txt" hinter dem Befehl umleiten.
script.cmd "C.\Ordner" "*suchbegriff*" >"Datei.txt"
Mitglied: evinben
evinben 25.03.2017 um 12:02:26 Uhr
Goto Top
ach, lustig. Ich schrieb es, weil die Festplatte zwar durch Zugrissversuch aufgeweckt wurde (als ob sie durchgesucht wäre) aber in der CMD nichts zu sehen war und daher schaute ich mich nach eventuelle Ausgabedatei um.
Beim zweiten Aufruf ist mir bewusst geworden, dass das angegebene Verzeichnis gar nicht erstmals durchgesucht wird.
Irgendwas bleibt da noch anzupassen.

Klar wie immer. die Ausgabe einfach mit >"Datei.txt" umleiten.
Aktuell rufe ich die Datei direkt (nicht via script.cmd "C.\Ordner" "*suchbegriff*") und ich meinte in meiner Frage die Zeilen als Argument oder als echo für die Weiterverarbeitung innerhalb der einen Batch empfangen. Aber dies ist sind Kleinigkeiten, da über eine externe Datei die Ausgabe einzuholen es ebenso völlig OK ist.
Mitglied: colinardo
colinardo 25.03.2017 um 12:07:44 Uhr
Goto Top
Zitat von @evinben:

ach, lustig. Ich schrieb es, weil die Festplatte zwar durch Zugrissversuch aufgeweckt wurde (als ob sie durchgesucht wäre)
?
aber in der CMD nichts zu sehen war und daher schaute ich mich nach eventuelle Ausgabedatei um.
Beim zweiten Aufruf ist mir bewusst geworden, dass das angegebene Verzeichnis gar nicht erstmals durchgesucht wird.
Irgendwas bleibt da noch anzupassen.
Nein, geht einwandfrei (hier getestet!)
Klar wie immer. die Ausgabe einfach mit >"Datei.txt" umleiten.
Aktuell rufe ich die Datei direkt (nicht via script.cmd "C.\Ordner" "*suchbegriff*")
Musst du aber, da die Parameter-Variablen %~1 und %~2 Verwendung finden!!
und ich meinte in meiner Frage die Zeilen als Argument oder als echo für die Weiterverarbeitung innerhalb der einen Batch empfangen. Aber dies ist sind Kleinigkeiten, da über eine externe Datei die Ausgabe einzuholen es ebenso völlig OK ist.
Da baust du einfach eine For-Schleife um das Konstrukt face-smile
Mitglied: colinardo
colinardo 25.03.2017 aktualisiert um 12:17:54 Uhr
Goto Top
Also nochmal für dich ohne externen Aufruf:
@echo off
set "suchordner=C:\Ordner"  
set "suchbegriff=*test*"  
for /f "delims=" %%a in ('powershell -NoProfile -ExecutionPolicy Bypass -Command "$shell = New-Object -Com Shell.Application; gci '%suchordner%' -Filter *.zip -Recurse -Force -ErrorAction SilentlyContinue | ?{($shell.NameSpace($_.Fullname).Items() | ?{$_.Name -like '%suchbegriff%'})} | select -Expand Fullname"') do (  
    echo %%a
)
Geht hier einwandfrei.
Mitglied: evinben
evinben 25.03.2017 aktualisiert um 12:11:17 Uhr
Goto Top
face-wink, klar wegen den Argumenten (%~1 & %~2).
Schau dir die Ausgabe bei ausgeschaltetem @echo off an:

->set SearchDir=F:\

->set SearchString=*.pst

->powershell -NoProfile -ExecutionPolicy Bypass -C "$shell = New-Object -Com Shell.Application; gci 'F:\' -Filter *.zip -Recurse -Force -ErrorAction SilentlyContinue | ?{($shell.NameSpace($_.Fullname).Items() | ?{$_.Name -like '*.pst'})} | select -Expand Fullname"  

->echo END
END
Mitglied: colinardo
colinardo 25.03.2017 um 12:23:04 Uhr
Goto Top
s. letzten Kommentar.
Mitglied: evinben
evinben 25.03.2017 um 12:24:44 Uhr
Goto Top
Geht hier einwandfrei.
hm ... was könnt es denn sein ... Erkennst du sonst irgendwelche Fehler in meiner CMD-Ausgabe oben?
Mitglied: evinben
evinben 25.03.2017 um 12:27:07 Uhr
Goto Top
dein Kommentar habe ich gleich danach gesehen und ebenso ausprobiert, aber es war ja von der Struktur her (außer der FOR-Schleife) genauso wie bei mir (im Bezug auf denen Hinweis mit den Argumenten, welche in Variable umgewandelt werden sollen).
Mitglied: 132692
132692 25.03.2017 aktualisiert um 12:42:08 Uhr
Goto Top
Moin Leuts,
Zitat von @colinardo:
Geht hier einwandfrei.
Kann ich ebenso bestätigen. Fehler wird also bei dir liegen.
hm ... was könnt es denn sein
  • Fehlende Zugriffsrechte mit dem Account der das Skript aufruft, wenn du ein ganzes Laufwerk durchsuchst!
  • Falscher Suchbegriff
  • Powershell Executionpolicy nicht freigeschaltet.
  • Zu tiefe Ordnerverschachtelung > 260 Zeichen
  • inkompatible ZIP-Files

Welches OS?

Gruß p.
Mitglied: evinben
evinben 25.03.2017 aktualisiert um 13:06:32 Uhr
Goto Top
Hallo @132692,

OS
Win7 x32.

Fehlende Zugriffsrechte
Als Admin habe ich davor ebenso versucht. Im Prozess Explorer wird mir aber angezeigt, dass PowerShell stets ausgelastet ist (ca. 50% CPU) - also da tut sich was, aber das Laufwerk wird nur aufgeweckt und nichts mehr.

Falscher Suchbegriff
*.pst

Zu tiefe Ordnerverschachtelung
tja, das liegt aber nicht an mir face-wink - es geht um die Windows Sicherung, da wird ordentlich verschachtelt.

'Powershell Executionpolicy
doch, ist in Registry gesetzt.
Mitglied: 132692
132692 25.03.2017 aktualisiert um 12:50:57 Uhr
Goto Top
Zitat von @evinben:
Fehlende Zugriffsrechte
Als Admin habe ich davor ebenso versucht. Im Prozess Explorer wird mir aber angezeigt, PowerShell stets ausgelastet ist (ca. 50% CPU) - also da tut sich was, aber das Laufwerk wird nur aufgeweckt und nichts mehr.
Ein ganzes Laufwerk zu durchsuchen kann dauern, je nachdem wie viele ZIP-Files es gibt.
Mach es doch erst mal in einem Testordner .
das Laufwerk wird nur aufgeweckt
? Häh lass es erst mal an min jung face-wink


Zu tiefe Ordnerverschachtelung
tja, das liegt aber nicht an mir face-wink - es geht um die Windows Sicherung, da wird ordentlich verschachtelt.
? Die Windows-Sicherung legt doch nicht in *.ZIP-Files ab ????
.NET kann aber nicht mehr wie 260 da steigt es aus und überspringt die Ordner. Entferne mal das -ErrorAction SilentlyContinue dann siehst du eventuelle Fehler.
Mitglied: evinben
evinben 25.03.2017 aktualisiert um 13:12:01 Uhr
Goto Top
? Häh lass es erst mal an min jung face-wink
Nach der Verarbeitung erhalte ich echo END (siehe oben), was für mich nun heißt, dass der Prozess abgeschlossen ist.

? Die Windows-Sicherung legt doch nicht in *.ZIP-Files ab ????
Die Datensicherung doch face-wink (also nicht das Systemimage als .VHD)

Entferne mal das -ErrorAction SilentlyContinue dann siehst du eventuelle Fehler.
werde es gleich versuchen
Mitglied: colinardo
Lösung colinardo 25.03.2017 aktualisiert um 13:35:23 Uhr
Goto Top
Zitat von @evinben:
Zu tiefe Ordnerverschachtelung
tja, das liegt aber nicht an mir face-wink - es geht um die Windows Sicherung, da wird ordentlich verschachtelt.
Da klingelts bei mir, die Dateien die du suchst liegen innerhalb des ZIPs in Unterordnern richtig? Dann kann das Batch-Skript oben sie nicht finden weil es nur auf der ersten Ebene in diesen gesucht hat.

Hiermit durchsucht es auch Unterordner in den ZIPs:
@echo off
set "suchordner=C:\Ordner"  
set "suchbegriff=*.pst"  
for /f "delims=" %%a in ('powershell -NoProfile -ExecutionPolicy Bypass -Command "$shell = New-Object -Com Shell.Application; $list = {param($f) $f.Items() | ?{$_.IsFolder} | %%{. $list $_.GetFolder};$f.Items() | ?{!$_.IsFolder -and $_.Name -like '%suchbegriff%'}};gci '%suchordner%' -Filter *.zip -Recurse -ErrorAction SilentlyContinue | ?{(. $list $shell.NameSpace($_.Fullname))} | select -Expand Fullname"') do (  
    echo %%a
)
Sorry for that.

Skript ganz oben wurde darauf hin auch aktualisiert

So, wünsche euch noch ein sonniges Wochenende!

Grüße Uwe
Mitglied: evinben
evinben 25.03.2017 um 17:06:29 Uhr
Goto Top
So funktioniert es! Und nur die betroffenen Archivpfade werden wie gewünscht akkurat zeilenweise gelistet!

Ist es normal, dass es via PowerShell ca. 9 bis 10-fach länger dauert, bis die gesuchten Dateien gelistet sind?
Für den getesteten Ordner braucht PowerShell ca. 10 Min.
Im Windows Explorer dauert das Gleiche knapp über eine Minute, bis alle gesuchte Dateien vollständig gelistet sind.
In 7-Zip dauert es lediglich 30 s - hier ist die Ausgabe allerdings sehr umständlich so zusammen zu puzzeln, dass der selbe Ergebnis herauskommt.
Mitglied: colinardo
colinardo 25.03.2017 aktualisiert um 17:20:13 Uhr
Goto Top
Da das Shell.Application Objekt keine Methode zum rekursiven Listen von Dateien innerhalb der Zips bereitstellt muss diese Methode es manuell machen.
Schneller ist das erst genannte Powershell-Skript im ersten Beitrag oben, erfordert jedoch das min. PS 3.0 auf dem Rechner installiert ist, lässt sich aber auch zu einem Einzeiler für die Batch zusammenstampfen wenn man das wollte.
Das das PS Skript nicht die Performance hat wie nativer C Code den Windows nutzt sollte klar sein face-wink.
Und Windows selber nutzt zusätzlich die Indizierung zur Beschleunigung!
Aufhüschen kann man das natürlich immer noch mit paralleler Verarbeitung. Gibt viele Wege nach Rom.

Ausgaben komplizierter Art lassen sich aber auch problemlos via Regex Parsen wenn du das willst, das wäre auch kein Problem.
Mitglied: evinben
evinben 25.03.2017 aktualisiert um 17:37:17 Uhr
Goto Top
aha, danke für die Infos face-wink

Bei der Ausführung der anderen beiden Codes erhalte ich folgende Fehlermeldung:

Das Argument für den Parameter "searchfolder" kann nicht überprüft werden. Das Validierungsskript "Test-Path $_" für das Argument mit dem Wert "F:\" *.pst" hat nicht "True" zurückgegeben. Ermitteln Sie, weshalb beim Validierungsskript ein Fehler aufgetreten ist, und führen Sie den Befehl erneut aus.  
    + CategoryInfo          : InvalidData: (:) [ZIP-Archive nac...ace-Object).ps1], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,ZIP-Archive nach Dateien durchsuchen und Pfade ausgeben (mit Namespace-Object).ps1

Beachte hier den Abschnitt: ...Wert "F:\" *.pst"...
Der zweite Argument wird nicht links mit Anführungszeichen umrahmt.
Aus diesem Grund habe ich in der Aufruf-Batch, mit der ich diese zweite Batch ausführe, bei dem zweiten Argument auf der linken Seite mit zwei Anführungszeichen probiert, und dann wird es so angezeigt: ...Wert "F:\" "*.pst"...
Jedoch schlägt es weiterhin mit derselben Fehlermeldung.
Mitglied: colinardo
colinardo 25.03.2017 aktualisiert um 17:38:11 Uhr
Goto Top
Dann machst du den Aufruf falsch, es müssen zwei Parameter sein.
Sie dürfen 'nicht' zusammen durch Anführungszeichen umrahmt sein. Folge dem Aufruf oben damit klappt das Einwandfrei!
Das Skript prüft den ersten auf Existenz im Dateisystem.
Auch das Skript habe ich natürlich vor dem Posten überprüft!

Du bist heut aber ein echt schwerer Fall, Mensch Meier face-smile.

Wenn dich Powershell interessiert dann beschäftige dich damit erst mal eindringlich, einen Kursus kann ich dir hier nicht geben, Sorry.
Mitglied: evinben
evinben 25.03.2017 um 17:34:12 Uhr
Goto Top
folgende Version gibt PowerShell aus, also sollte nicht daran liegen - hab's noch damals auf deinen Hinweis gleich aktualisiert face-wink:
PS C:\Windows\system32> $PSVersiontable


Name                           Value                                                       
----                           -----                                                       
PSVersion                      4.0                                                         
WSManStackVersion              3.0                                                         
SerializationVersion           1.1.0.1                                                     
CLRVersion                     4.0.30319.42000                                             
BuildVersion                   6.3.9600.16406                                              
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}                                        
PSRemotingProtocolVersion      2.2                      
Mitglied: colinardo
colinardo 25.03.2017 aktualisiert um 17:44:46 Uhr
Goto Top
Du hast Leerzeichen im Skriptnamen/Pfad ?
Dann musst du den Aufruf so gestalten:
powershell -command "& 'c:\pfad\script mit Leerzeichen.ps1' 'F:\' '*.pst'"  
Mitglied: evinben
evinben 25.03.2017 um 17:40:53 Uhr
Goto Top
ops, wie kommst du drauf Herr Müller face-wink, dass ich nur mit dem einen Argument aufrufe?
Es steht sogar in der Ausgabe, dass diese zwei sind:
Abschnitt: ...Wert "F:\" *.pst"...
allerdings ein Anführungszeichen geht dabei verloren, worauf ich dich oben hingewiesen habe face-wink

Der Aufruf ist genau so wie oben face-wink:
powershell -F "%~dp0ZIP-Archive nach Dateien durchsuchen und Pfade ausgeben.ps1" "%SearchDir%" "%SearchString%"  
Mitglied: colinardo
colinardo 25.03.2017 aktualisiert um 17:43:41 Uhr
Goto Top
s. letzten Post zum Hinweis mit Leerzeichen im Pfad und Namen.

Wer nennt den so seine Skripte tststs face-big-smile
Mitglied: evinben
evinben 25.03.2017 um 17:44:33 Uhr
Goto Top
ja, sowohl in der Aufruf- als auch in der zweiten Batch sind Leerzeichen im Skript-Namen vorhanden...
Seit wann ist dies so schlimm?
Mitglied: colinardo
colinardo 25.03.2017 aktualisiert um 17:45:53 Uhr
Goto Top
Zitat von @evinben:
Seit wann ist dies so schlimm?
Siehst du ja gerade am eigenen Leib face-wink
Code dafür s. oben.
Mitglied: evinben
evinben 25.03.2017 um 17:46:29 Uhr
Goto Top
ach du Fuchsle, hast es bereits korrigiert face-wink face-wink
Mitglied: evinben
evinben 25.03.2017 um 17:55:44 Uhr
Goto Top
jetzt wird etwas zumindest zeilenweise abgearbeitet, aber in jeder Zeile nur Fehler ausgegeben:

Der Typ [System.IO.Compression.ZipFile] wurde nicht gefunden: Stellen Sie sicher, dass die Assembly, die diesen Typ enthält, geladen ist.
In F:\ZIP-Archive nach Dateien durchsuchen und Pfade ausgeben.ps1:8 Zeichen:46
+ gci $searchfolder -Filter *.zip -Recurse | ?{([System.IO.Compression.ZipFile]::O ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.IO.Compression.ZipFile:TypeName) , RuntimeException
    + FullyQualifiedErrorId : TypeNotFound
Mitglied: evinben
evinben 25.03.2017 um 18:00:21 Uhr
Goto Top
beim Aufruf des zweiten Skripts (mit Namespace-Object), tut sich da was eine Minute lang (zumindest ohne Fehler), aber es werden keine Ergebnisse in der CMD ausgegeben.
Mitglied: colinardo
Lösung colinardo 25.03.2017 aktualisiert um 18:27:41 Uhr
Goto Top
Hat nur die Type-Deklaration gefehlt. Ist oben ergänzt. Die ist wohl beim Pasten auf dem Smartphone irgendwie rausgeflogen, schieet Autokorrektur kann man da nur sagen. Für's Programmieren absolut ungeeignet.

Schönen Samstag Abend wünsch ich, ich bin jetzt raus.
Mitglied: evinben
evinben 25.03.2017, aktualisiert am 23.11.2017 um 21:47:20 Uhr
Goto Top
Und Windows selber nutzt zusätzlich die Indizierung zur Beschleunigung!
In diesem Falle nicht, da speziell dieser Datenträger aus der Indizierung gezielt herausgenommen ist und dennoch sind es nur eine Minute. Mir ist es umso mehr ein Rätsel, wie 7-Zip es zweimal so schnell schafft die gesuchten Dateien zu listen, als Windows (mit seinen eigen erstellten Dateien > Sicherungen).

Das erste Skript (ohne Namespace-Object) ist extrem schnell! Nur 10 s. und ist somit dreifach schneller als 7-Zip!
Es hat sich auf jeden Fall gelohnt, da ich sehr viele Unterordner verarbeiten will, was ohne dieser Optimierung mehrere Stunden umsonst dauern würde.

Das zweite Skript (ohne Namespace-Object) ist mit 8 Min. ebenso fast genauso lahm, wie das 3. Skript (der Einzeiler in Batch).

Dir wünsche ich einen schönen Abend. Jetzt mache ich mal auch Pause und dann muss ich noch anpassen.
Mitglied: 132692
132692 25.03.2017 um 19:05:55 Uhr
Goto Top
Das zweite Skript (ohne Namespace-Object) ist mit 8 Min. ebenso fast genauso lahm, wie das 3. Skript (der Einzeiler in Batch).
Ist ja kein Wunder denn das ist das selbe nur nicht für den Einbau in die Batch angepasst face-smile
Mitglied: itpeperoni
itpeperoni 23.11.2017 um 21:25:17 Uhr
Goto Top
Das ist ein Super-Skript, ein Ansatz den ich gesucht habe face-smile
Ich bin auf der Suche nach folgendem:

Mehrere Zip-Dateien sind in einem Verzeichnis, die Zip-Dateien enthalten Unterorder und in diesen dann die Dateien.
Ich möchte die Zips nach bestimmten Suchbegriffen durchforsten und dann bei einem Fund das entsprechende Verzeichnis komplett nach Ziel X entpacken. Das entpackte Verzeichnis soll so heissen wie die zip Datei ...

Ist vielleicht noch ein bisschen Holz, aber ich muss mich wohl dringend mal mit Powershell auseinandersetzen face-smile
Mitglied: evinben
evinben 23.11.2017 aktualisiert um 22:42:40 Uhr
Goto Top
Hallo itpeperoni,

schau dir am besten die Befehlszeilen aus der Hilfe von 7z.
Z. B. den Befehl "e (Extract)"

extracts all files from archive archive.zip to the current directory :
7z e archive.zip

extracts all *.cpp files from archive archive.zip to c:\soft folder :
7z e archive.zip -oc:\soft *.cpp -r


oder den Befehl "x (Extract with full paths)"

extracts all files from the archive archive.zip to the current directory :
7z x archive.zip

extracts all *.cpp files from the archive archive.zip to c:\soft folder :
7z x archive.zip -oc:\soft *.cpp -r

Solltest du nicht zurecht kommen, kannst dich dann gerne erneut melden face-wink

Viel Erfolg
Evinben
Mitglied: itpeperoni
itpeperoni 24.11.2017 um 10:39:23 Uhr
Goto Top
Hallo evinben,

vielen Dank für den Tip !

Das war der entscheidende Hinweis face-smile

Problem gelöst

Viele Grüße