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

Dateinamen-String vor und nach einem bestimmten Zeichen Tauschen

Frage Entwicklung Batch & Shell

Mitglied: Flaschback

Flaschback (Level 1) - Jetzt verbinden

27.07.2009, aktualisiert 21:34 Uhr, 6904 Aufrufe, 23 Kommentare

Hallo, ich würde mich über jede Hilfe freuen, da es eine sehr nervenaufreibende Arbeit wäre alles von Hand zu machen, darum wende ich mich an diese Community ...

Hallo,

Ich möchte gern einen Dateinamen auslesen, und Wörter (String) vor einem Zeichen z.B. "-" oder "_" und einen String nach diesem Zeichen tauschen.
Hier ein Beispiel:

Hallo Welt - Hersteller Gott.txt

nach der Konvertierung soll die Datei inhaltlich unverändert bleiben und heissen:

Hersteller Gott - Hallo Welt.txt

(die Zeichenlänge vor und nach dem "-" ist variabel und Alphanummerisch)

das müsste ich weiß nicht wie oft ... also soviele male wie Dateien sich in dem Ordner befinden durchgeführt werden ... auch ordnerunabhängig.
Es spielt auch keine Rolle welches Suffix hinter dem . steht (.txt oder .php ... etc.)

Vieleicht kennt jemand ein Tool oder eine Batch die mir hierbei helfen könnte ?
Ich währe sehr dankbar !!!

PS: ich hab schon einige Tools ausprobiert und alle bieten ein verschieben an jedoch nicht mit Bedingung vor oder nach einem Zeichen als austausch des String :o(
Mitglied: rubberman
27.07.2009 um 21:42 Uhr
Das sollte relativeinfach in einer FOR -Schleife zu verwirklichen sein, in der man zB. "-" als Delimiter setzt. Interessant in diesem Fall wäre aber noch eins: So ie du es gepostet hast, befindet sich vor und hinter dem Bindestrich ein Leerzeichen. Ist das in der Realität auch so und soll es in den umgewandelten Namen wieder so sein?
Bitte warten ..
Mitglied: bastla
27.07.2009 um 21:49 Uhr
Hallo Flaschback und willkommen im Forum!

Lt Deinem Beispiel wären auch noch Leerzeichen vor und nach dem Trennzeichen ...

Falls dem nicht so wäre, müsste etwa folgender Batch genügen:
01.
@echo off & setlocal 
02.
set "Ordner=D:\Test" 
03.
set "Typ=txt" 
04.
 
05.
for %%i in ("%Ordner%\*.%Typ%") do for /f "tokens=1,2 delims=-" %%a in ("%%~ni") do echo ren "%%i" "%%b-%%a%%~xi"
Das "echo" vor dem "ren" sorgt dafür, dass (zum Testen) das Umbenennen nur angezeigt, aber noch nicht durchgeführt wird.

Grüße
bastla

[Edit] Ich war auch schon mal schneller ... [/Edit]
Bitte warten ..
Mitglied: Flaschback
27.07.2009 um 21:57 Uhr
Danke für die "Erste-Hilfe" ;o) ... ja es befindet sich ein Leerzeichen vor und nach dem "-", macht das die Sache komplizierter ?

Ich habe auch mal eine Datei ohne Leerzeichen gespeichert und getestet ... er zeigt mir das Ergebnis korrekt an mit dem Befehl Pause konnte ich es dann sehen ;o)

Welcher Befehlssatz fehlt denn damit ich die Datei danach auch so wieder schreibe ?
Bitte warten ..
Mitglied: bastla
27.07.2009 um 22:07 Uhr
Hallo Flaschback!
macht das die Sache komplizierter ?
Nicht wirklich
01.
@echo off & setlocal 
02.
set "Ordner=D:\Test" 
03.
set "Typ=txt" 
04.
 
05.
for %%i in ("%Ordner%\*.%Typ%") do for /f "tokens=1,2 delims=-" %%a in ("%%~ni") do set "Teil1=%%b" & set "Teil2=%%a" & call :ProcessFile "%%~fi" 
06.
pause 
07.
goto :eof 
08.
 
09.
:ProcessFile 
10.
:Loop1 
11.
if "%Teil1:~,1%"==" " (set "Teil1=%Teil1:~1%" & goto :Loop1) 
12.
 
13.
:Loop2 
14.
if "%Teil2:~-1,1%"==" " (set "Teil2=%Teil2:~,-1%" & goto :Loop2) 
15.
 
16.
echo ren %1 "%Teil1% - %Teil2%%~x1" 
17.
goto :eof
In dieser Version wird am "-" geteilt, und alle unmittelbar davor bzw danach befindlichen Leerzeichen (auch mehrere) werden eliminiert. Am Ende wird wieder mit je einem Leerzeichen vor und nach dem "-" zusammengesetzt.

Grüße
bastla

[Edit]
Habe nun die test.bat mal ausprobiert, jedoch wurde nichts getausch :o( ... auch wurde mein cmd fenster gleich wieder geschlossen ... hmm, mache ich hier auch etwas falsch ?
Beim Testen von Batches solltest Du das CMD-Fenster bereits vorher öffnen und von der Kommandozeile aus starten oder zumindest den Befehl "pause" an das Ende des Batches stellen - mache ich in der neuen Version ...

Geändert wird auch in dieser Version nichts an den Dateinamen, solange vor dem "ren" das "echo" steht - wenn Du es entfernst, wird tatsächlich umbenannt (und dann ist auch "pause" nicht mehr nötig)
[/Edit]

[Edit2] Noch ein paar unnötige "echo"-Zeilen entfernt [/Edit2]
Bitte warten ..
Mitglied: pieh-ejdsch
27.07.2009 um 22:11 Uhr
Hallo Flaschback,

hier für Batch ungetestet im Ordner
01.
set pfad=D:\test\ 
02.
for /f "tokens=1-3 delims=-_." %%b in ('dir "%pfad%" /a-d /b ') do if exist "%pfad%%%b-%%c.%%d" (ren "%pfad%%%b-%%c.%%d" "%%c-%%b.%%d") else if exist "%pfad%%%b_%%c.%%d" ren "%pfad%%%b_%%c.%%d" "%%c_%%b.%%d"
viel zu spät und vllt gehts gar net.....naja
Bitte warten ..
Mitglied: Flaschback
27.07.2009 um 22:18 Uhr
Danke deine Lösung funktioniert im Ansatz (also anzeige in der cmd) ... ich verzichte auf die Leerzeichen, diese kann ich ja mit einem Tool entfernen, aber er speichert die Datei nicht wieder im Testordner ...
Bitte warten ..
Mitglied: bastla
27.07.2009 um 22:20 Uhr
Hallo Flaschback!
aber er speichert die Datei nicht wieder im Testordner ...
... nachdem Du das "echo" in Zeile 16 (habe oben noch einige Zeilen herausgenommen) entfernt hast?

Ansonsten noch ein Hinweis: Das Umbenennen erfolgt (derzeit) nur, wenn es noch keine gleichnamige Datei gibt - was sollte denn im Fall des Falles dann passieren?

Grüße
bastla
Bitte warten ..
Mitglied: Flaschback
27.07.2009 um 22:27 Uhr
Jo, leider speichert er diese nicht wie gewünscht, bzw. bennent sie nicht um

auch wird das Fenster sofort geschlossen obwoh hier nun pause am ende steht ...
Bitte warten ..
Mitglied: Flaschback
27.07.2009 um 22:28 Uhr
hier erscheint immer das "Datei nicht gefunden" wurde...
Bitte warten ..
Mitglied: rubberman
27.07.2009 um 22:31 Uhr
Vermute, die umbenannte Datei wird gleich wieder gefunden, und erneut umbenannt. Vielleicht wäre es besser die DIR Ausgabe zu verarbeiten ?!
Bitte warten ..
Mitglied: bastla
27.07.2009 um 22:37 Uhr
@rubberman
Vermute, die umbenannte Datei wird gleich wieder gefunden, und erneut umbenannt.
Ist zwar bei meinen Tests nicht passiert, möchte ich aber auch nicht ausschließen ...

Die Zeile 5 sollte dann so aussehen:
for /f "delims=" %%i in ('dir /b /a-d "%Ordner%\*.%Typ%"') do for /f "tokens=1,2 delims=-" %%a in ("%%~ni") do set "Teil1=%%b" & set "Teil2=%%a" & call :ProcessFile "%Ordner%\%%i"
Grüße
bastla
Bitte warten ..
Mitglied: Flaschback
27.07.2009 um 22:38 Uhr
Das ist eine sehr gute Frage herr Professor, darf ich mal googlen ?
hmm, in deiner ersten Version hat er ja die beiden Test Dateien erfolgreich angezeigt wie sie aussehen sollten ... nun hab ich die erste "Version nochmals getestet, merkwürdig ist nun aber das er trotz des pause Befehl das Fenster schliesst ...
Bitte warten ..
Mitglied: Flaschback
27.07.2009 um 22:43 Uhr
Nein ..

Ihr seid super !!!

Ich habe nur den Fehler begangen die test.bat in den Testordner abzulegen und dort auszuführen ...

als ich die auf dem Deskop nochmals ausgeführt habe wurde ein Wunsch wahr ...

Mensch ich danke euch !!!

Vielen vielen Dank !!!
Bitte warten ..
Mitglied: bastla
27.07.2009 um 22:46 Uhr
Hallo Flaschback!

Steht "pause" auch in einer eigenen Zeile?
Wie auch immer, so sollte es jedenfalls klappen ("pause" und "Test-echo" gleich weggelassen und noch ein klein wenig verschönert - siehe Festlegung des Trennzeichens in Zeile 4):
01.
@echo off & setlocal 
02.
set "Ordner=D:\Test" 
03.
set "Typ=txt" 
04.
set "Del=-" 
05.
 
06.
for /f "delims=" %%i in ('dir /b /a-d "%Ordner%\*.%Typ%"') do for /f "tokens=1,2 delims=%Del%" %%a in ("%%~ni") do set "Teil1=%%b" & set "Teil2=%%a" & call :ProcessFile "%Ordner%\%%i" 
07.
goto :eof 
08.
 
09.
:ProcessFile 
10.
:Loop1 
11.
if "%Teil1:~,1%"==" " (set "Teil1=%Teil1:~1%" & goto :Loop1) 
12.
 
13.
:Loop2 
14.
if "%Teil2:~-1,1%"==" " (set "Teil2=%Teil2:~,-1%" & goto :Loop2) 
15.
 
16.
ren %1 "%Teil1% %Del% %Teil2%%~x1" 
17.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: rubberman
27.07.2009 um 22:58 Uhr
@bastla, sorry für meine Schnelligkeit. Hab mich dann etwas zurückgehalten, um dir den Spaß nicht zu vermießen

Hab das gerade noch mal getestet:
Liegt der Batch im Testverzeichnis, funktioniert nur die DIR-Version, da sonst die Datei gleich wieder erkannt wird.
Anderenfalls gehts auch ohne DIR. (Bill weiß warum )
Bitte warten ..
Mitglied: pieh-ejdsch
27.07.2009 um 23:02 Uhr
ist der letzte Backslash bei pfad?
Bitte warten ..
Mitglied: bastla
27.07.2009 um 23:15 Uhr
@rubberman
Hab mich dann etwas zurückgehalten, um dir den Spaß nicht zu vermießen
Danke, ganz lieb - war aber wirklich nicht nötig ...

Liegt der Batch im Testverzeichnis, funktioniert nur die DIR-Version, da sonst die Datei gleich wieder erkannt wird.
Anderenfalls gehts auch ohne DIR. (Bill weiß warum )
Bist Du Dir hinsichtlich des (ganz) Letzteren sicher?

Es gäbe übrigens noch eine dritte Möglichkeit: Ein "pushd" oder "cd /d" in das Testverzeichnis hinein - was dann wohl passiert?

Grüße
bastla
Bitte warten ..
Mitglied: Flaschback
27.07.2009 um 23:16 Uhr
Funktioniert auch ... ohne Leerzeichen zwar aber hatte hier den selben Fehler begangen ... auf den Desktop funtionierte deine Batch einwandfrei !!!
Bitte warten ..
Mitglied: Flaschback
27.07.2009 um 23:32 Uhr
Hier kommt es bei der Batch übrigens zu Fehlern, bei der Anzahl von 600 Dateien muss ich nun manuell auswerten wo er den Dateinamen angepasst hat und wo nicht ... egal, viele Stunden Arbeit erspart und ne menge Nerven ! Warum er die manchmal nicht geändert hat ist mir schleierhaft ... in dem Testordner hatte ich eine Anzahl von > 20 getestet (die erste Datei wird übrigens in allen Fällen nicht umbenannt)
Bitte warten ..
Mitglied: rubberman
27.07.2009 um 23:38 Uhr
@bastla
Wenn man in das Verzeichnis wechselt, verhält sich der Batch natürlich so, als würde er dort liegen. Und das ist auch schon das einzig logische an dem, was Bill (vermutlich doch nicht) weiß

<edit> und Flaschback hat schon das nächste Mysterium </edit>
Bitte warten ..
Mitglied: pieh-ejdsch
28.07.2009 um 00:01 Uhr
wie sieht den der Dateiname der ersten Datei aus?
zum Auswerten - logge die Umbenannten Dateien doch einfach.
bei mir im Testordner benennt die Batch nur die Dateien um, welche "Teilstring-Teilstring2.ext"
oder "Teilstring_Teilstring2.ext" nach Teilstring2-Teilstring.ext bzw Teilstring2_Teilstring.ext um.
alle anders aufgebauten Namen von Dateien werden nicht umbenannt da nicht so aufgebaut im Dateiname.
und es ist auch völlig egal wo die Batch bei mir ist solange der komplette pfad angegeben ist.
wenn die Pfadangabe im REN Befehl fehlt und die Datei nicht im (Batch)-REN verzeichnis ist wird auch nichts umbenannt.
Bitte warten ..
Mitglied: Flaschback
28.07.2009 um 00:34 Uhr
Öhm ... Leute ... ich bin äusserst zufrieden, Ihr solltet es auch sein.

Du hast mich schon glücklich gemacht, die Batch-Datei war unter den Test-Dateien. Hab übrigens bemertkt woran es ebenfalls liegt ... die Datei-Endung ist schuld ... manche haben .PHP dann wieder .php ... jaja Augen auf ;o) ... Ich werde euer Forum weiterempfehlen, so schnelle Hilfe hätte ich nun gar nicht erwartet ! Ihr habt mir bestimmt 1-2 Tage Arbeit dadurch abgenommen, wenn ich überlege ich hätte alles manuell ändern müssen (Mir war schon ganz anders).

Nachmals Danke !!!
Bitte warten ..
Mitglied: bastla
28.07.2009 um 10:18 Uhr
Hallo Flaschback!

Freut mich, dass es nun klappt.

Allerdings kann ich mir nicht vorstellen, dass die Groß-/Kleinschreibung der Datei-Endung der Fehler war, da die Endung (in Form der Variablen %Typ%) nur im "dir"-Befehl verwendet wird, und dem ist's egal, ob "PHP" oder "php" ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...