Jump to content

Batch um Dateien in Ordner mit Teil des Dateinamen zu verschieben


Direkt zur Lösung Gelöst von BOfH_666,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo Forengemeinde,

 

ich bräuchte hilfe bei einem Batch:

 

Der Batch soll Dateien in den zugehörigen Ordner verschieben.

 

Die Dateien sind in folgendem Format:

LST_102021_MaxMustermann_Zeitstempel.pdf

LST_102021_MariaMustermann_Zeitstempel.pdf

 

Nun soll der Batch die Dateien wie folgt verschieben:

 

LST_102021_MaxMustermann_Zeitstempel.pdf -> MaxMustermann

LST_102021_MariaMustermann_Zeitstempel.pdf -> MariaMustermann

 

Die Dateien sollen also quasi über den Namen zugeordnet werden. Der Text vor dem Namen ist mehr oder weniger immer gleich (nur das Monat/Jahr ändern sich).

 

Ich habe nun schon folgendes gefunden, ich weiß allerdings nicht wie ich das adaptieren kann.

 

@echo off

setlocal

set "srcdir=Quellverzeichnis"
set "destdir=Zielverzeichnis (Dort wo die Ordner sind bzw. angelegt werden)"


for /f "tokens=1,*" %%i in ('dir "%srcdir%" /b /-p /a:-d /o:gne') do (
  if not exist "%destdir%\%%i" md "%destdir%\%%i"
  move "%srcdir%\%%i %%j" "%destdir%\%%i"

    
  echo "%destdir%\%%i\%%j"
  echo.
)

endlocal

 

Hättet ihr da vielleicht einen Vorschlag für mich?

 

Liebe Grüße

Link zu diesem Kommentar

Moin,

 

um wie viele Dateien geht es (-zig, hunderte, tausende)? Wie viele unterschiedliche Ordner sind zu erwarten? Soll das einmalig sein oder mehrfach/regelmäßig?

 

Falls es sich wirklich lohnt, das per Skript zu machen, sollte man es per PowerShell tun. Mit Batch wird man sich da ziemlich einen abbrechen.

 

Gruß, Nils

 

Link zu diesem Kommentar
  • Beste Lösung

Wo buddelt ihr nur immer wieder so alten Sch**ß aus ... nimm Powershell:

$Quellverzeichnis = 'C:\sample\Quelle'
$Zielverzeichnis = 'C:\sample\Ziel'

Get-ChildItem -Path $Quellverzeichnis -Filter *.pdf -File |
    ForEach-Object{
        $Name = ($_.BaseName -split '_')[2]
        $Ziel = Join-Path -Path $Zielverzeichnis -ChildPath $Name
        if (-not (Test-Path -Path $Ziel)) {
            New-Item -Path $Ziel -ItemType Directory | Out-Null
        }
        Move-Item -Path $_.FullName -Destination $Ziel
    }

 

Link zu diesem Kommentar

Hallo @BOfH_666,

 

Erstmal danke für deine Antwort, ich habe es nun getestet und bekomme aber folgende Fehlermeldung:

 

 

Get-ChildItem-Path : Die Benennung "Get-ChildItem-Path" 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.
In BatchTest.ps1:4 Zeichen:1
+ Get-ChildItem-Path $Quellverzeichnis -Filter*.pdf -File|
+ ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Get-ChildItem-Path:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

 

Könntest du mir da noch einmal kurz helfen?

 

Sorry, hab mit PowerShell bisher nichts zu tun gehabt :(

bearbeitet von Prezi
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...