Umbenennen von Dateien im Stapel und Verschieben in Unterordner (die erstellt werden müssen)

587
user1769925

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

Ich bin offen für Vorschläge, wie Sie dies auf der Windows-Befehlszeile, der Powershell oder Cygwin tun.

0
Hast du etwas versucht? In PowerShell denke ich, dass Sie nur `.Stubstring (0," - ")" der Datei `BaseName 'und` .Substring (1, "-") `des` Namens' der Datei benötigen, um loszulegen: `Move-Item -Path $ original_file.FullName -Destination" $ ($ (Split-Path -Parent -Path $ original_file.FullName) \ $ ($ original_file.BaseName.Substring (0, "-")) \ $ ($ original_file.Name.Substring (1, "-")) "` flolilolilo vor 6 Jahren 0
Hallo und willkommen bei SuperUser. Wir sind kein Service "Bitte schreiben Sie mir ein Skript". Wenn Sie uns Ihre Forschungsergebnisse mitteilen, helfen wir Ihnen, festzustellen, wo die Dinge nicht richtig funktionieren. Die Lösung kann in jedem der genannten Tools ausgeführt werden, die Sie verwenden möchten. Für Batch sollten Sie sich den Befehl FOR ansehen. LPChip vor 6 Jahren 2
Hallo, danke für deine Antworten. Ich bin mit PowerShell völlig inkompetent, daher habe ich dort nichts ausprobiert. Ich bin mit dem Befehl FOR in der Befehlszeile vertraut, um eine Schleife zu erstellen, aber ich hatte Schwierigkeiten mit den String-Manipulationen dort. user1769925 vor 6 Jahren 0

2 Antworten auf die Frage

1
LotPings

A PowerShell script:

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

The batch:

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

Tree before:

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

Tree after:

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

Easy with VBS. Copy the code to a file with extention '.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 

adjust source and destination folder. Don't forget "\" at the end. Destination folder must exist. Quick'n'dirty coded. Only ?????-????? files in sourceFolder.