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

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

Powershell 5 BSOD

(3)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...