Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Komplexes umbenennen von Dateien

Frage Entwicklung Batch & Shell

Mitglied: chainsaw

chainsaw (Level 1) - Jetzt verbinden

27.05.2010 um 12:59 Uhr, 3652 Aufrufe, 11 Kommentare

Hallo Gemeinde,

Hab wieder mal ein Problem, vielleicht könnt ihr mich auf die richtige Spur bringen:


Ich hab einige Dateien, die so wie dieses Muster aussehen:

AUS-19052010-AA@BBB-027_CCC_ZV7_DDD.pdf

Ich möchte die Benamung der Dateien so ändern, dass ich _CCC und _DDD entferne, also nur

AUS-19052010-AA@BBB-027_ZV7.pdf

übrig bleibt.

Die Problemstellung: Bis zum @ ist der Dateiname unterschiedlich, aber immer gleich lang - das bekomm ich hin, aber:
BBB kann 2 - 4 Stellen lang sein, für die Bezeichnung _CCC und _DDD gibt es jeweils ca. 20 verschiedene
Kürzel die im Dateinamen vorkommen können.

Mit diesem Code (den hab ich aus einem Beitrag von Biber) kann ich z.B. das _CCC rausschmeissen:

01.
@echo off & setlocal 
02.
FOR /R "D:\test" %%i in ("*.pdf") do call :umbenennen "%%~fi" 
03.
goto :EOF 
04.
 
05.
:umbenennen  
06.
Set "name=%~n1"  
07.
Set "Name=%name:_CCC=%" 
08.
If "%name%"=="%~n1" goto :eof 
09.
ren "%~1" "%name%%~x1"
Wie lösche ich nun aber den Rest aus dem Dateinamen und wie sage ich dem Batch, dass _CCC auch _FFF oder _RRR heissen kann?
Ist sowas überhaupt mit Batch lösbar oder wird das zu kompliziert?

Was meint Ihr?

Gruß chainsaw
Mitglied: Snowman25
27.05.2010 um 13:08 Uhr
Hallo chainsaw,

Benutz den TotalCommander. Der hat ein Mehrfach-Umbenenn-Tool das auch RegEx unterstützt. Da tust du dir wesentlich leichter damit. Hat ausserdem eine Vorschau, wie die Dateinamen dann wären.

Grüße
Snow
Bitte warten ..
Mitglied: bankaifan
27.05.2010 um 13:22 Uhr
Nur mal rein aus Interesse, Snow, wäre es denn mit Batch möglich?
Bitte warten ..
Mitglied: Snowman25
27.05.2010 um 13:27 Uhr
generell schon möglich, aber anders geht es halt wesentlich schneller und einfacher
Batch ist nicht großartig für Stringmanipulation geeignet, deshalb greife ich bei sowas gerne auf externe Programme zurück.

Mfg
Snow
Bitte warten ..
Mitglied: bankaifan
27.05.2010 um 13:31 Uhr
Ok, ...

ich komm mit dem For sowieso ned so ganz zurecht, was hier wohl das wichtigste wäre, mit "denim" und so zeugs =)
Bitte warten ..
Mitglied: Snowman25
27.05.2010 um 13:34 Uhr
Zitat von bankaifan:
"denim"

"delims" :-P
Bitte warten ..
Mitglied: bankaifan
27.05.2010 um 13:51 Uhr
genau

ich check des ned wie der i-wie nen string mti diesem %%i,%%j ... in mehrer teile zerlegt....aber tut jetzt nix zur sache
Bitte warten ..
Mitglied: LotPings
27.05.2010 um 14:07 Uhr
Hallo chainsaw,

vorausgesetzt die Anzahl und Position der unterstriche in den Dateinamen ist konstant, ist es nicht schwer :

01.
@Echo off&Setlocal 
02.
CHCP 1252 
03.
Set Base="D:\test" 
04.
Set Out=".\RenPDF.CMD" 
05.
Type NUL >%Out% 
06.
FOR /R %Base% %%A in ("*.pdf" 
07.
  ) do for /F "tokens=1-4 delims=_" %%B in ("%%~nA" 
08.
    ) dO Echo Ren "%%~fA" "%%B_%%D.PDF" >>%Out% 
09.
Notepad.exe %Out% 
10.
Set /P Answer=Befehle aus der Datei %Out% ausführen ? [J/N] 
11.
If /i "%Answer%" EQU "J" %Out%
Mit dieser Batch werden alle Rename Befehle in eine Datei geschrieben,
die du mit Notepad sichten/bearbeiten kannst bevor du sie ausführst.

Gruß
LotPings
Bitte warten ..
Mitglied: chainsaw
27.05.2010 um 14:45 Uhr
Hallo Lotpings,

wenn ich jetzt einen Hut aufhätte, dann würde ich den vor dir ziehen!
Der Hammer! Ich kann zwar nicht nachvollziehen was die Befehle
im einzelnen machen, aber es haut schon fast perfekt hin. Respekt!

Danke dir herzlich und einen schönen Tag!

Gruß
chainsaw
Bitte warten ..
Mitglied: LotPings
27.05.2010 um 20:28 Uhr
Zitat von chainsaw:
Ich kann zwar nicht nachvollziehen was die Befehle im einzelnen machen, aber es haut schon fast perfekt hin. Respekt!

Naja, ich sehe Biber schon mit der Doku-Keule winken Also:

Zeile 6 ist dir ja schon bekannt, da hab ich nur das feste Verzeichnis gegen eine Variable getauscht, damit man da nicht mehr "rumschrauben" muss.
Zeile 7 zerlegt den von Z6 übergebenen Namen "%%~nA" (ohne LW,Pfad und Extension)
an dem Trenner Unterstrich "Delims=_" in 4 Teile "tokens=1-4" beginnend bei %%B bis %%E
da du nur den ersten und dritten Teil behalten willst, lasse ich in Zeile 8,
beim zusammenbau des Ren-Befehls eben %%C und %%E weg;
%%A hat ja noch den kompletten alten Namen (erzwungen durch das "~f" in "%%~fA")
und da beim neuen Namen noch die Erweiterung gebraucht wird hänge ich sie einfach dran.
(Hätte ich auch vom alten Namen mit "%%~xA" übernehmen können.)

Über "tokens=1,3" könnte man auch gleich das weglassen steuern,
dann wären es beim Zusammenbau eben %%B und %%C gewesen.

Wenn du dich damit auseinandersetzen willst, kommmst du nicht am intensiven Studium der Hilfe-Ausgabe von "For /?" vorbei.

Gruß
LotPings
Bitte warten ..
Mitglied: Biber
27.05.2010 um 21:06 Uhr
Moin chainsaw,

Zitat von chainsaw:
Ich kann zwar nicht nachvollziehen was die Befehle im einzelnen machen, aber es haut schon fast perfekt hin.
*seufz*
So möchte diesen Beitrag ungern als "gelöst" in die Geschichte eingehen lassen...
Es ist doch nicht das Ziel dieses Forums, hier irgendwelche Hütchenspielchen abzusiehen.
Und wenn es LotPings' primäres Anliegen wäre, hier nur ein "Huhu - guck mal was ich kann" vorzuführen, dann hätte er bestimmt einen Nickname wie "Zampano" gewählt.

Bitte versuche wenigstens den ganzen undurchschaubaren Zaubertrick anhand der folgenden Testschritte nachzuvollziehen.

Ausgangssituation:
Du hast nach eigenen Aussagen zig Dateien mit der Namenskonvention AUS-19052010-AA@BBB-027_CCC_ZV7_DDD.pdf
Und willst diese bestehende feste Namenskonvention durch eine neue (ebenso feste) neue Konvention ersetzen

Dann lass uns doch das Muster, den Algorithmus suchen....

Wir gehen mal an an CMD-Prompt und legen in einem Spielverzeichnis zwei Spieldateien an:
[Eingabezeilen sind durch ein führendes ">" gekennzeichnet; dieses Zeichen NICHT mit eingeben
Zeilen beginnen mit ">REM" brauchst du auch nicht eingeben, nur lesen ]

 
>echo x>AUS-19052010-AA@BBB-027_CCC_ZV7_DDD.pdf 
 
>echo x>AUS-19052010-XX@YYY-027_ZZZ_ZV7_BLA.pdf 
 
>REM das Namensmuster ist doch wohl [beliebigeZeichen][Unterstrich][beliebig][_][beliebig][_][beliebig.pdf] 
>REM oder auf bätschisch: *_*_*_*.pdf 
>REM also finden wir alle umzubenennenden Dateien (aber nicht bereits umbenannte!) mit ... 
>dir /b *_*_*_*.pdf 
AUS-19052010-AA@BBB-027_CCC_ZV7_DDD.pdf 
AUS-19052010-XX@YYY-027_ZZZ_ZV7_BLA.pdf 
 
>REM Wenn wir diese Ausgabenzeilen "unbehandelt" noch durch eine FOR/F-Anweisung schleifen sieht es so aus: 
>for /f "delims=" %a in ('dir /b *_*_*_*.pdf') do @echo a[%a] 
a[AUS-19052010-AA@BBB-027_CCC_ZV7_DDD.pdf] 
a[AUS-19052010-XX@YYY-027_ZZZ_ZV7_BLA.pdf] 
 
>REM Wenn wir dagegen sagen, trenne jede Zeile "token"-weise an jedem "Delimiter" Unterstrich 
>for /f "delims=_ tokens=1-4" %a in ('dir /b *_*_*_*.pdf') do @echo Mit Unterstrich als delim a[%a] b[%b] c[%c] d[%d] 
Mit Unterstrich als delim a[AUS-19052010-AA@BBB-027] b[CCC] c[ZV7] d[DDD.pdf] 
Mit Unterstrich als delim a[AUS-19052010-XX@YYY-027] b[ZZZ] c[ZV7] d[BLA.pdf] 
 
>REM wenn wir jetzt den Token %b weglassen wollen: 
>for /f "delims=_ tokens=1-4" %a in ('dir /b *_*_*_*.pdf') do @echo Ren %a_%b_%c_%d %a_%c_%d 
Ren AUS-19052010-AA@BBB-027_CCC_ZV7_DDD.pdf AUS-19052010-AA@BBB-027_ZV7_DDD.pdf 
Ren AUS-19052010-XX@YYY-027_ZZZ_ZV7_BLA.pdf AUS-19052010-XX@YYY-027_ZV7_BLA.pdf 
Mit diesem (ungefährlichen) proof-of-concept am CMD-Prompt kannst du die "Geheimnisse" der FOR/F-Token-Logik verstehen.
Und vielleicht erkennst du, wenn du bis hierhin mitgeturnt hast, den LotPingschen Algorithmus wieder.

Grüße
Biber

[Edit @LotPings] Danke!
.... mein Beitrag ist zwar jetzt obsolet, aber ich hatte ihn schon fertig getippt, bevor ich deinen gelesen habe.. [/Edit]
Bitte warten ..
Mitglied: chainsaw
28.05.2010 um 09:48 Uhr
Hallo LotPings, hallo Biber

Bitte versuche wenigstens den ganzen undurchschaubaren Zaubertrick anhand der folgenden Testschritte nachzuvollziehen.

Asche auf mein Haupt! Ich geb mir ja Mühe, aber als Nicht-EDV`ler werde ich manche Dinge hier wohl nie hundertprozentig verstehen - und für ne Umschulung zum Batch-Programmierer bin ich zu alt!
Trotzdem erleichtern mir diverse Batches meinen Arbeitsalltag ganz ungemein - dank der Hilfe hier im Forum.
@Biber: Ich werd dein Tutorial durchackern, versprochen!

Schönes WE
Gruß chainsaw
Bitte warten ..
Ähnliche Inhalte
Viren und Trojaner
WannaCry - wiederhergestellte Dateien umbenennen (7)

Frage von MasterPhil zum Thema Viren und Trojaner ...

Microsoft
gelöst PS: Dateien in einem Ordner Umbenennen und nummerieren mit PS (5)

Frage von Pludan zum Thema Microsoft ...

Batch & Shell
gelöst Batch Datei: PDF Dateien verschieben, umbenennen und löschen (4)

Frage von F0rcehunter zum Thema Batch & Shell ...

Batch & Shell
Umbenennen entpackter Dateien nach Dateinamen der rar- zip-Datei

Frage von windows-nutzer zum Thema Batch & Shell ...

Neue Wissensbeiträge
Heiß diskutierte Inhalte
Festplatten, SSD, Raid
PC stellt nach dem Bios ab (18)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...

iOS
16 iPads zentrall verwalten (18)

Frage von simonlohr zum Thema iOS ...

Viren und Trojaner
Ransomware .nm4 (15)

Frage von Zyklo92 zum Thema Viren und Trojaner ...

Windows 7
Freeware MSI Tool (13)

Frage von uridium69 zum Thema Windows 7 ...