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, 3590 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Microsoft Office
gelöst Per VBA im Verzeichniss dateien mit Wildcard umbenennen (4)

Frage von usenussi zum Thema Microsoft Office ...

Windows 7
gelöst Mehrere Dateien in Windows umbenennen mit Batchjob (4)

Frage von Jeduja zum Thema Windows 7 ...

Batch & Shell
gelöst Verschieben und Umbenennen von Video-Dateien anhand der Nummer im Namen (3)

Frage von Foja.Filmer zum Thema Batch & Shell ...

Batch & Shell
gelöst Dateien eines Ordners mit find welche 1234 im Namen haben umbenennen in x12345 (4)

Frage von reissaus73 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
Suche passender Treiber (12)

Frage von stolli zum Thema Windows Server ...