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.