Powershell PDF's aus Ordner kopieren?
Ich bin relativ neu im Umgang mit Powershell und hänge bei einer kleinen Aufgabe fest...
Man gibt einen Pfad (für einen Ordner) und einen Zielpfad (ebenfalls ein Ordner) an. Dann werden alle PDF's aus dem Ordner1 in Ordner 2 Kopiert.
Folgendes hab ich schon:
[void][Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')
$title1 = 'Ausgangsdatei' $msg1 = 'Ausgangsordnerpfad eingeben:' $Ausgangsordnerpfad = [Microsoft.VisualBasic.Interaction]::InputBox($msg1, $title1)
$title2 = 'Zieldatei' $msg2 = 'Zielordnerpfad eingeben:' $Zielordnerpfad = [Microsoft.VisualBasic.Interaction]::InputBox($msg2, $title2)
Copy-Item -Path $Ausgangsordnerpfad -Destination $Zielordnerpfad -Recurse
Meine Frage(n): Wie verhinder ich das der Ausgangsordner mit in den Zielordner kopiert wird? Wie kann ich nur PDF's zum kopieren auswählen?
1 Antwort
Wo bitte hast Du den Schrott her? 🤮
LoadWithPartialName ist veraltet und sollte nicht mehr benutzt werden.
Verwende statt dessen:
Add-Type -AssemblyName Microsoft.VisualBasic
$User = [Microsoft.VisualBasic.Interaction]::InputBox('ZielOrdner', 'Zielordnerpfad eingeben:', $(Get-Location))
...aber wer möchte schon tippen, wenn er auswählen kann.😏 Das macht die Sache weniger Fehleranfällig:
Add-Type -AssemblyName System.Windows.Forms
(New-Object System.Windows.Forms.FolderBrowserDialog).ShowDialog()
unterdrücken des Ausgangsordners:
Hier meine pragmatische Art den Basisordener auszuschließen:
gci -dir|gci -recurse -file -filter *.pdf
diese Methode ist Narrensicher:
Das erste gci gibt alle Unterordner an das zweite~ weiter, welches in den Ordnern rekursiv die Dateien nach dem Filterkriterium sucht.
es gibt sicher auch noch andere Varianten, aber die ist kurz und schmerzlos.
Hier das ganze Script
demo.ps1
Add-Type -AssemblyName System.Windows.Forms
function Get-Folder([String]$Preselect) {
$DirDialog = New-Object System.Windows.Forms.FolderBrowserDialog
$DirDialog.Description = "Wähle einen Ordner"
$DirDialog.SelectedPath=$Preselect
$DirDialog.rootfolder='MyComputer'
if($DirDialog.ShowDialog() -eq "OK")
{
$folder += $DirDialog.SelectedPath
}
return $folder
}
#Du kannst ein vorgewählten Ordner Angeben (zB. Get-Folder 'D:\')
#Get-Folder ohne Parameter selectiert "Computer"
#hier der aktuelle Ordner
$QuellOrdner=Get-Folder $(Get-Location)
$ZielOrdner=Get-Folder $(Get-Location)
#stumpfer Trick um die Dateien im Ausgangsordner selbst nicht zu berücksuchtigen:
#mit gci -directory -recurse nur die Unterordner abfragen
#...und an eine zweite Instanz weiterreichen welche sich um die Dateien kümmert
$MyPDFs=$QuellOrdner|gci -dir |gci -recurse -file -filter *.pdf
#mal alle zeigen
$MyPDFs|%{$_.Fullname}|sort
#...und alles zum Ziel schaufeln
$MyPDFs|Copy-Item -dest $ZielOrdner
pause
Wow vielem Dank.
Super :D
Ich hab zu Hause ein älteres Buch hierzu gefunden aus dem ich das hier mache, vielleicht ist es deshalb so veraltet...
update: