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

Batch File-Renamer

Frage Entwicklung Batch & Shell

Mitglied: mc-doubleyou

mc-doubleyou (Level 2) - Jetzt verbinden

19.03.2012 um 16:06 Uhr, 2506 Aufrufe, 7 Kommentare

Hallo,

ich habe mal wieder ein Probelm.

Ich habe in einem Ordner Dateien mit folgendem Format:

Ausnahmebewilligung_NAME_NUMMER.doc

Nummer existiert nicht immer aber manchmal.

Darauß soll NAME - Ausnahmebewilligung NUMMER.doc werden.

Ich dachte schon daran den Dateinamen in eine Variable umzuwanden und dann von der Variablen nur Teile zu nehmen aber irgendwie schaff ich keinen Code.
Wichtig ist von der Änderung sollen nur Dateien welche Ausnahme*.doc heißen betroffen sein. Weiters sollte Name und nicht NAME geschrieben sein, im Moment ist es meist alles Groß.

Ich denke mit einer Batch sollte es möglich sein, ich weiß nur nicht so recht wie.
Wahrscheinlich ein Zusammenspiel von for und tokens und delim (blick ich nicht durch)

Danke!

lg mc-dy
Mitglied: bastla
19.03.2012 um 16:49 Uhr
Hallo mc-doubleyou!

Das könnte etwa so gehen:
01.
@echo off & setlocal 
02.
set "Ordner=D:\Dein Ordner" 
03.
set "Maske=Ausnahme*.doc" 
04.
set "Umw=A_a B_b C_c D_d E_e" 
05.
 
06.
pushd "%Ordner%" 
07.
for /f "delims=" %%i in ('dir /b "%Maske%"') do call :ProcessFile "%%i" 
08.
popd 
09.
goto :eof 
10.
 
11.
:ProcessFile 
12.
set "Nr=" 
13.
for /f "tokens=1-3 delims=_" %%a in ("%~n1") do set "Ausn=%%a" & set "Name=%%b" & set "Nr=%%c" 
14.
if defined Nr set "Nr= %Nr%" 
15.
set "NameKlein=%Name%" 
16.
for %%u in (%Umw%) do for /f "tokens=1-2 delims=_" %%a in ("%%u") do call set "NameKlein=%%NameKlein:%%a=%%b%%" 
17.
set "NameNeu=%Name:~,1%%NameKlein:~1%" 
18.
echo ren %1 "%NameNeu% - %Ausn%%Nr%%~x1" 
19.
goto :eof
- die Zeile 4 kannst Du ja selbst komplettieren ...

Grüße
bastla
Bitte warten ..
Mitglied: mc-doubleyou
19.03.2012 um 17:02 Uhr
Hallo bastla,

wie immer WOW!

Wenn ichs jetzt noch verstehen würde *gg*

1-3 Versteh ich
4 Keine Ahnung

Im Bereich vom ProcessFile steig ich dann eher wieder aus

delims bestimmt den Teiler
tokens versteh ich immer noch nicht so ganz

und ab 16 steig ich endgültig aus.

Um wie gewünscht zu adabtieren muss ich es jedoch leider erst mal verstehen.
Wäre nett wenn du deinen Code aufschlüsseln könntest.

Danke!

lg mc-dy
Bitte warten ..
Mitglied: 60730
19.03.2012 um 17:22 Uhr
Servus,

4 Keine Ahnung
04. set "Umw=A_a B_b C_c D_d E_e"

nach was sieht dass denn aus?

  • umw == ultramittelwelle?
  • umw == unabhängigesMeisterwerk?
  • umw == andlung?

[OT]
@ Bastla:

Vielleicht doch mal das €cho off weg lassen und ne Pause am ende reinmalen, dass gutenbergt sich besser
[/OT]
Bitte warten ..
Mitglied: mc-doubleyou
19.03.2012 um 19:23 Uhr
Das das Umwandlung heißt macht soweit Sinn.

Doch was wird gewandelt? Ist das der Berich NAME gegen Name? sollte also mit

A_a B_b C_c D_d E_e F_f G_g H_h I_i J_j K_k L_l M_m N_n O_o P_p Q_q R_r S_s T_t U_u V_v W_w X_x Y_y Z_z Ä_ä Ö_ö Ü_ü

gefüllt werden?

lg mc-dy
Bitte warten ..
Mitglied: bastla
19.03.2012 um 19:37 Uhr
Hallo mc-doubleyou!

Wie T-Mo schon angeregt hat, einfach mal "echo on" verwenden und sich den Ablauf anschauen ...

... dann könntest Du zB sehen, dass für jede Datei das Unterprogramm ":ProcessFile" aufgerufen wird (mit Übergabe des Dateinamens als Parameter, der dort als %1 ankommt).

In diesem Unterprogramm wird dann anhand der von Dir genannten Trennzeichen "_" der Dateiname (nur der Name, daher "%~n1") in bis zu 3 Teile zerlegt. Da es den Teil 3 nicht immer geben muss, wird dessen Vorhandensein geprüft, indem vorweg die dafür verwendete Variable gelöscht und nach der Zerlegung abgefragt wird, ob sie denn jetzt existiert. Wenn es einen Teil 3 (die "Nummer") gibt, soll dieser nach Deiner Formatvorgabe durch ein Leerzeichen getrennt an den ursprünglichen Teil 1 angefügt werden - dieses Leerzeichen wird aber nur benötigt, wenn es eben eine Nummer gibt, weswegen ich es in der Variablen gleich der Nummer voranstelle.

Da es in Batch keine Funktion zur Konvertierung von Groß- in Kleinbuchstaben gibt, musste ich etwas basteln - eine Schleife, die jeweils ein Zeichen umwandeln kann. Jetzt kommt Zeile 4 ins Spiel, da dort die Ersetzungspaare für diese Umwandlung festgelegt werden. Diese Umwandlung erfolgt unter Verwendung der Hilfsvariablen "%NameKlein%", der zunächst der Name in Originalschreibweise zugewiesen wird. Dann geht die erste Schleife in Zeile 16 alle Ersetzungspaare einzeln durch und erhält dabei jeweils die Kombination "altes Zeichen"_"neues Zeichen" in %%u, welche mithilfe der zweiten Schleife (anhand des Trennzeichens "_" - das habe ich willkürlich gewählt, vielleicht wäre es mit "=" verständlicher) in %%a (= zu ersetzendes Zeichen) und %%b (= Ersatzzeichen) aufteilt. Mit diesen beiden Zeichen (also beim ersten Durchlauf "A" und "a") wird dann in %NameKlein% ersetzt - wenn anfangs "NAME" drin stand, wird im ersten Durchlauf daraus "NaME", bei "B" bis "D" ändert sich nix, nach dem "E" ist es dann "NaMe", und wenn Du die Zeile 4 komplettierst, werden schließlich alle enthaltenen Zeichen konvertiert.

Da letztendlich in %NameKlein% "name" steht, aber der Anfangsbuchstabe groß bleiben soll, wird eben das erste Zeichen des ursprünglichen Namens (= "N") mit allem, was nach dem ersten Zeichen in %NameKlein% (= "ame") steht, zu %NameNeu% zusammengefasst.

Die Zeile 18 schließlich sorgt (durch das vorangestellte "echo") für die "Demo-Ausgabe" des Rename-Befehles (zu erwähnen wäre hier vielleicht noch "%~x1", was dem Dateityp des Parameters 1 - also ".doc" - entspricht. Wenn alles so aussieht, wie Du es haben willst, brauchst Du nur noch das angesprochene "echo" entfernen, und es wird tatsächlich umbenannt.
@T-Mo: Hast ja recht ...

Grüße
bastla

[Edit] Die zwischenzeitlich gestellten Fragen sollten damit eigentlich beantwortet sein, wobei die Antwort auf die letzte davon "ja" lautet ... [/Edit]
Bitte warten ..
Mitglied: mc-doubleyou
19.03.2012 um 23:01 Uhr
Wow, danke!

In meinen Augen bist du Gott bastla ...

Immer wenn ich dachte ich hätte es begriffen, hab ich zig Fehler drinnen oder finde gar keinen Code, aber du wirfst den gerade zu aus dem Ärmel raus.

lg mc-dy
Bitte warten ..
Mitglied: 60730
20.03.2012 um 07:51 Uhr
Zitat von bastla:
@T-Mo: Hast ja recht ...

Salue bastla,

Noe,
Wir beiden haben halt das gleiche auswahlverfahren, um herauszufinden, wie ernst es dem fragesteller mit seiner loesung und vor allem eigeninitiative ist.

Bei dir muss man halt nur den allerersten doppelbefehl kicken, bei mir braucht man einen guten kaffe und ne portion humor.

Bleib bei deinem weg, meiner eckt zu oft falsch an, aber in der richtung bin ich merkbefreit
Grüße
bastla
Retour
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
"Generic" Drucker mit batch - File erstellen (6)

Frage von MrPreesident zum Thema Batch & Shell ...

Batch & Shell
gelöst Kl. Frage: Log-File schreiben per Batch (3)

Frage von Yauhun zum Thema Batch & Shell ...

Batch & Shell
gelöst ( Batch ) Open File or Folder Dialog (5)

Frage von clragon zum Thema Batch & Shell ...

Windows 10
Batch: Copy file.txt Lokaler Drucker (1)

Frage von fluluk zum Thema Windows 10 ...

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

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

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