Powershell PDF's aus Ordner kopieren?

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
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
Erzesel  02.04.2020, 19:03

update:

Add-Type -AssemblyName System.Windows.Forms


  #optional Beschreibenden Text für   die OrdnerAuswahlbox angeben
function Get-Folder([String]$Preselect , [String]$Description) {
    $DirDialog = New-Object System.Windows.Forms.FolderBrowserDialog
    $DirDialog.Description = $Description
    $DirDialog.SelectedPath=$Preselect
    $DirDialog.rootfolder='MyComputer'    
    if($DirDialog.ShowDialog() -eq "OK")
    {
        $folder = $DirDialog.SelectedPath
    }
    return $folder
}

  #jetzt kann auch ein variabler Text  übergeben werden:
$QuellOrdner=Get-Folder $(Get-Location) -Description 'Waehle Quellordner:'
$ZielOrdner=Get-Folder $(Get-Location) 'Waehle Zielordner:'

  #Werte für  Button  und Icon siehe https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.messagebox.show?view=netframework-4.8
$DialogAntwort=[System.Windows.Forms.MessageBox]::Show('Willst Du nur Dateien aus Unterordnern von:'+"`r`n"+ $QuellOrdner+"`r`n"+'kopieren?',"Titel",4,32)
if ($DialogAntwort -eq 'Yes') {
      #Basisordener auszuschließen
    $MyPDFs=$QuellOrdner|gci -dir |gci -recurse -file -filter *.pdf
    $MyPDFs|%{$_.Fullname}|sort
    $MyPDFs|Copy-Item -dest $ZielOrdner
}
else {
      #auch  Dateien im Basisverzechnis
    $MyPDFs=$QuellOrdner|gci -recurse -file -filter *.pdf
    $MyPDFs|%{$_.Fullname}|sort
    $MyPDFs|Copy-Item -dest $ZielOrdner
}

  #Zielordner im Explorer öffnen
Start-Process Explorer $ZielOrdner
pause
2
LegendaryBeazt 
Fragesteller
 03.04.2020, 07:33
@Erzesel

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...

0