Top-Themen

Aktuelle Themen (A bis Z)

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

Leerzeichen in Dateinamen in Unterstrich umbenennen via Batch

Frage Entwicklung Batch & Shell

Mitglied: fischkopf

fischkopf (Level 1) - Jetzt verbinden

08.01.2009, aktualisiert 13:54 Uhr, 23876 Aufrufe, 10 Kommentare

Hallo Leute,

ich habe da ein (für Euch wahrscheinlich triviales) Anliegen: Ich möchte via Batch Dateien in einem bestimmten Verzeichnis umbenennen. Die Dateien sehen so aus: XX XXXXXXXX_X.tif und sollen so aussehen: XX_XXXXXXXX_X.tif.
Ich will also nur das an der dritten Stelle vorkommende Leerzeichen durch einen Unterstrich ersetzen.

Die aufrufende Batch liegt nicht im Zielverzeichnis, aber das ist sicher das kleinste Problem

Wer kann mich da auf den richtigen Weg bringen oder hat gar direkt eine Lösung dafür parat? Tausend Dank!

fischkopf
Mitglied: Biber
08.01.2009 um 14:15 Uhr
Moin fischkopf,

willkommen in Forum.
Wenn ich diese Anforderung (Dateien entsprechend einer exakten Wildcard-Spezifikation und in einem Bestimmten Verzeichnis) vorliegen hätte, würde ich es mit einem Oneliner vom CMD-Prompt aus abfackeln und nicht lange rumbätscheln.

01.
>for /f "tokens=1,2" %i in ('dir /b "e:\work\?? *.tif"') do @echo ren "e:\work\%i %j" %i_%j 
02.
ren "e:\work\XX XXXXXXXX_X.tif" XX_XXXXXXXX_X.tif
Hier mal ein examplarischer proof-of-concept für derartige Dateien im Verzeichnis "e:\work".

Grüße
Biber
Bitte warten ..
Mitglied: fischkopf
08.01.2009 um 14:30 Uhr
Hallo Biber,

herzlichen Dank für die schnelle Antwort! Das ganze soll leider zeitgesteuert immer wieder ausgeführt werden, deshalb muss ich das wohl in eine Batch schreiben. Muss ich dazu Anpassungen vornehmen?

Danke!

fischkopf
Bitte warten ..
Mitglied: Biber
08.01.2009 um 15:37 Uhr
Moin fischkopf,

wenn Du diese CMD-Prompt-zeile in einer Batchdatei verwenden willst, dann müssen die jetzigen einfachen Prozentzeichen ( %i und %j) durch doppelte ersetzt werden (%%i und %%j).

Beispiele dafür und auch für das zeitgesteuerte Starten über Taskplane o.ä. findest Du sicher über die Forumssuche.

Grüße
Biber
Bitte warten ..
Mitglied: fischkopf
08.01.2009 um 15:53 Uhr
Hallo Biber,

sorry - aber ich muss wohl die Anforderung nochmals genauer darstellen - mein Fehler!

Vom Leerzeichen an der dritten Stelle des Dateinamens können wir abrücken. Was ich bräuchte wäre eine Batch, die stur an die dritte Stelle des Dateinamens jeder gefundenen Datei in einem Verzeichnis (Dateimaske: *.tif) einen Unterstrich einfügt.

Also etwa so: xxxxxxxxxx_1.tif => xx_xxxxxxxx_1.tif oder yyyyyyyyyy_2.tif => yy_yyyyyyyy_2.tif

Die Dateinamen werden also alle um eine Stelle länger, und zwar um den an der dritten Stelle eingefügten Unterstrich.

Ich würde mich freuen, wenn Du mir dabei nochmal helfen könntest. Danke!
Bitte warten ..
Mitglied: Biber
08.01.2009 um 17:13 Uhr
Na ja, fischkopf,

ist handwerklich auch kein großes Problem, aber....

--> irgendwie brauchst Du dann erstmal einen echten Plan B.
Denn wenn per Taskplaner in regelmäßigen Abständen alle *.tif-Dateien um ein "_" an der dritten Zeichenposition "verlängert" werden, dann hast Du am Ende des Jahrtausends ziemlich lange Dateinamen.

Kann ich denn die Zusatzbedingung "alle *.tif, die KEINEN Unterstrich als 3tes Zeichen im Dateinamen haben" unterstellen?

Wenn ja, dann wäre eine Batchskizze:
01.
@echo off & setlocal 
02.
Set "myTifDir=E:\work" 
03.
FOR %%i in ( "%myTifDir%\*.tif") do call :RenameWithUnderscore "%%~nxi" 
04.
goto :eof 
05.
 
06.
:RenameWithUnderscore Parameter 1 ist der Dateiname 
07.
Set "oldname=%~1" 
08.
Set "OldFirst2Chars=%oldname:~0,2%" 
09.
Set "OldChars3ToEnd=%oldname:~2%" 
10.
IF "%oldname:~2,1%" NEQ "_" ( 
11.
ECHO Ren "%mytifDir%\%oldname%" "%OldFirst2Chars%_%OldChars3ToEnd%" 
12.
REM nach dem Testen: Ren "%mytifDir%\%oldname%" "%OldFirst2Chars%_%OldChars3ToEnd%" 
13.
14.
goto :eof
[Ungetestete Skizze]

Grüße
Biber
Bitte warten ..
Mitglied: fischkopf
08.01.2009 um 21:24 Uhr
Hallo Biber,

da bekomme ich leider nur die lapidare Mitteilung: Syntaxfehler
Den habe ich aber leider noch nicht gefunden....

Aber die Prüfung auf Nichtvorhandensein eines Unterstriches an der dritten Stelle des Dateinamens ist auch nicht nötig, da die umbenannten Dateien weiterverarbeitet werden und danach aus dem Verzeichnis verschwinden!

Parallel dazu habe ich mich auch weiter dazu umgeschaut und frage mich, warum folgende Batch nicht richtig funktioniert:

@echo off
setlocal enabledelayedexpansion

for %%i in ("*.tif") do (
set x=%%i
ren %%i !x:~0,2!_!x:~2!
)

Wenn nur eine Datei im Verzeichnis liegt (hier im Beispiel liegt die Batch im Verzeichnis wo auch die Bilder liegen) klappt es prima. Wenn es mehrere sind macht sie aus
IMG_0075.JPG
IMG_0078.JPG

folgendes:
IM__G_0075.JPG
IM_G_0078.JPG

Sie fügt also in der ersten Datei zwei Unterstriche ein. Wieso? Keine Ahnung.

fischkopf
Bitte warten ..
Mitglied: Biber
08.01.2009 um 21:34 Uhr
Moin fischkopf,

nur kurz zwischendurch zum Syntaxfehler (ich schreibe grad an einem anderen Kommentar)
  • oben fehlte ein schließendes Anführungszeichen
  • und es musste heißen "call :gecallterblock" statt "call: gecallterblock" (also SPACE-Doppelpunkt statt umgekehrt)
  • Fehler sind oben korrigiert

  • das zweite Beispiel habe ich jetzt nicht angesehen

Grüße
Biber
Bitte warten ..
Mitglied: fischkopf
08.01.2009 um 21:53 Uhr
Hallo Biber,

Deine Batch läuft nun ohne Fehlermeldung, ein Nicht-Newbie hätte die sicher auch selbst gefunden DANKE!

Allerdings zeigt die Batch das gleiche Verhalten wie von mir oben geschildert, wenn man die die Prüfung auf schon vorhandene Unterstriche an der zweiten Stelle herausnimmt: ab zwei umzubenennenden Dateien im Verzeichnis erhält eine Datei pro Aufruf immer einen Unterstrich mehr als die andere. Beim nächsten Aufruf die andere.
Den Grund dafür habe ich noch nicht finden können, möchte es aber gern kapieren. Wenn du mal Lust und Zeit hast kannst du das ja mal antesten. Bin echt gespannt, wo der Hase im Pfeffer liegt
Bitte warten ..
Mitglied: Biber
08.01.2009 um 22:19 Uhr
Moin fischkopf,

dann kann es eigentlich nur so sein, dass ich durch das Umbenennen die dynamische Liste des
FOR %%i in ("verzeichnis\*.tif) ...
...durcheinanderbringe.

Dieses Verhalten habe ich zwar noch nicht beobachtet, aber umgehen können wir es bestimmt, wenn wir die "FOR %%i"-Anweisung durch eine Anweisung der Art...
FOR /F "delims=" %%i in ('dir /b "verzeichnis\*.tif"') do ....
ersetzen.

Probier Du es ruhig, wenn Du noch wach bist.... ich mach sonst morgen weiter...

Grüße
Biber
Bitte warten ..
Mitglied: fischkopf
09.01.2009 um 11:19 Uhr
Hallo Biber,

habe die Batch mit Deinern letzten Änderungen angepasst und getestet. Funktioniert prima!
Für Interessiert und die Nachwelt: So sieht sie aktuell aus:
01.
:: ======================== 
02.
@echo off & setlocal  
03.
Set "myTifDir=c:\test11"  
04.
FOR /F "delims=" %%i in ('dir "%myTifDir%\*.tif" /B') do call :RenameWithUnderscore "%%~nxi"  
05.
goto :eof  
06.
 
07.
:RenameWithUnderscore 
08.
Set "oldname=%~1"  
09.
Set "OldFirst2Chars=%oldname:~0,2%"  
10.
Set "OldChars3ToEnd=%oldname:~2%"  
11.
Ren "%mytifDir%\%oldname%" "%OldFirst2Chars%_%OldChars3ToEnd%"  
12.
 
13.
goto :eof 
14.
:: ========================
Danke nochmals!



[Edit Biber] Gern geschehen. Habe noch den Code in <code>-Tags gesetzt. [/Edit]
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch: doppeltes Leerzeichen in Dateinamen?
gelöst Frage von WoswaasiBatch & Shell3 Kommentare

Hallo! Wir verarbeiten bei uns in der Arbeit Audio-Dateien, die über Nacht in 5-Minuten-Abschnitte gesplittet werden. Ich habe dafür ...

Batch & Shell
Leerzeichen, Sonderzeichen in Dateinamen lassen Batch crashen
Frage von Domain-JaneBatch & Shell3 Kommentare

Hallo zusammen, hier meine Frage zum Sonntag ;): Mit dem Dir-Befehl lasse ich mir eine Datei erzeugen, indem Pfad+Dateinamen ...

Batch & Shell
Leerzeichen aus Dateinamen entfernen
gelöst Frage von noob-xBatch & Shell3 Kommentare

Hallo Profis, ich möchte bei vielen Dateien in einem Ordner die Leerzeichen aus den Dateinamen entfernen Dateien sehen so ...

Batch & Shell
Batch - Dateinamen auslesen, umbenennen + dreistellige Zahl vor bisherigen Dateinamen setzen.
Frage von citroendsvierBatch & Shell4 Kommentare

Hallo und guten Morgen, ich möchte für drei Ordner (2011, 2013, 2014) eine Batch schreiben, die die darin enthaltenen ...

Neue Wissensbeiträge
Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 1 StundeWindows 101 Kommentar

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 3 StundenSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 1 TagViren und Trojaner2 Kommentare

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 1 TagRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Brainstorming, einfachste Option 1 getrenntes LAN (mit WAN zugang)
Frage von 132954LAN, WAN, Wireless13 Kommentare

Hi, folgendes: Wir bekommen eine Glasfaser Leitung, Und das sollte Optional so aussehen: Ein Modem/Router für das WAN, ein ...

Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Netzwerkgrundlagen
Hi eine blöde frage. xD
Frage von 132954Netzwerkgrundlagen12 Kommentare

Also: Habe 2012 r2 essentials neuinstalliert, allerdings installiert diese version ja gleich diesen gangen AD kram mit, den hab ...