Dateien stapelweise umbenennen und in Unterordner verschieben (die erstellt werden müssen)

Dateien stapelweise umbenennen und in Unterordner verschieben (die erstellt werden müssen)

Ich habe einen Ordner voller Dateien im Format "10389-2001.pdf", also erst eine fünfstellige Zahl, dann ein Bindestrich und dann eine vierstellige Zahl. Ich möchte das alles umbenennen, so dass die Datei selbst nur noch "2001.pdf" heißt, aber in einen neuen Unterordner "10389" verschoben wird. Da dieser Unterordner noch nicht existiert, müsste er erst noch erstellt werden.

Ich bin offen für Vorschläge, wie dies über die Windows-Befehlszeile, die Powershell oder Cygwin funktioniert.

Antwort1

Ein PowerShell-Skript:

Get-ChildItem *-*.pdf|Foreach-object {
    $Dir, $File = $_.Name.Split('-')[0,1]
    if (!(Test-Path $Dir)){MD $Dir}
    $_| Move -Destination ("$Dir\$File") 
}

Der Stapel:

@echo off
for /F "Tokens=1* delims=-" %%A in ('Dir /B "*-*.pdf"') do (
    If not exist ".\%%A" MD ".\%%A"
    Move "%%A-%%B" "%%A\%%B"
)

Baum vorher:

> tree /f .
Z:\
    10389-2001.pdf
    10815-2017.pdf

Baum nach:

> tree /f .
Z:\
├───10389
│       2001.pdf
└───10815
        2017.pdf

Antwort2

Ganz einfach mit VBS. Kopieren Sie den Code in eine Datei mit der Erweiterung '.vbs'

on Error Resume Next   
sFolder = "D:\test\"
dFolder = "D:\test1\"
Set oFSO = CreateObject("Scripting.FileSystemObject")

For Each oFile In oFSO.GetFolder(sFolder).Files
    NameParts = split(oFile.Name,"-")
    Set f = oFSO.CreateFolder(dFolder & NameParts(0))
    set fi = oFSO.GetFile(oFile)
    fi.Copy dFolder & NameParts(0) & "\" & NameParts(1)
Next

Quell- und Zielordner anpassen. "\" am Ende nicht vergessen. Zielordner muss vorhanden sein. Quick'n'dirty codiert. Nur ?????-????? Dateien im Quellordner.

verwandte Informationen