Problem beim Umbenennen von Dateinamen (if - else)
Hallo zusammen,
ganz frisch als Newbee angemeldet
Ich habe festgestellt, das es hier doch einige großartige Cracks gibt, die mir
(hoffentlich) weiterhelfen können.
Ich bin selbst nicht gerade der ungekrönte König bezgl. Batch Programmierung,
aber so zum Hausgebrauch gehts schon.
Hier komme ich aber nicht wirklich weiter:
Ich möchte einen Batch schreiben, bei dem sich die daraufgezogene Datei
umbenennt in z.B. "Dateiname.zip_"
Hintergrund ist, dass ich manchmal mehrere Dateien (meistens 2) mit demselben Namen
habe (bzw. erzeugen muss).
Die "alte" Datei möchte ich dazu kurz mal umbenennen, eben von "Dateiname.zip" in "Dateiname.zip_"
Das funktioniert mit u.a. Batch ja schon ganz nett.
Problem ist das Rück- Umbenennen. Ich krieg zwar festgestellt das der Dateiname mit nem Underbar
endet, aber als Vergleich in der IF - ELSE Geschichte funktioniert das net. Kann es sein, das IF beim
Zeichenkettenvergleich keine Wildcards zulässt oder was mach ich falsch.
Kann mir da jemand behilflich sein?
Dank & Grüße
Werner
PS: Ich weiss das es Kontextmenü Utilities gibt like rjhextension o.ä.
aber so mit einem Klick funktionieren die eben auch nicht
Ups... nochmal PS:
Betriebssystem Windows XP SP2
Intel 2,8 GHZ HT, 2 GB RAM
[Edit Biber] Code in ebensolche Tags gesetzt. Welcome auch von mir. [/Edit]
ganz frisch als Newbee angemeldet
Ich habe festgestellt, das es hier doch einige großartige Cracks gibt, die mir
(hoffentlich) weiterhelfen können.
Ich bin selbst nicht gerade der ungekrönte König bezgl. Batch Programmierung,
aber so zum Hausgebrauch gehts schon.
Hier komme ich aber nicht wirklich weiter:
Ich möchte einen Batch schreiben, bei dem sich die daraufgezogene Datei
umbenennt in z.B. "Dateiname.zip_"
Hintergrund ist, dass ich manchmal mehrere Dateien (meistens 2) mit demselben Namen
habe (bzw. erzeugen muss).
Die "alte" Datei möchte ich dazu kurz mal umbenennen, eben von "Dateiname.zip" in "Dateiname.zip_"
Das funktioniert mit u.a. Batch ja schon ganz nett.
Problem ist das Rück- Umbenennen. Ich krieg zwar festgestellt das der Dateiname mit nem Underbar
endet, aber als Vergleich in der IF - ELSE Geschichte funktioniert das net. Kann es sein, das IF beim
Zeichenkettenvergleich keine Wildcards zulässt oder was mach ich falsch.
##########################################################################
::
:: 09.12.2007 / 20:20:00
::
:: Dateien mittels Kontextmenü schnell umbenennen
:: Aus z.B. Diesesprogramm.exe wird Diesesprogramm.exe_
::
:: Ist die Datei auf diese Weise schon umbenannt wird sie
:: wieder zurückbenannt
@echo on & setlocal enableDelayedExpansion
:: Erst mal den kompletten Dateinamen nebst Pfad setzen
Set Dateiname=%1
:: Hier den Pfad (sPATH) und den Dateinamen (sFILE) und die
:: Extension (sPart2) setzen
for %%i in (%Dateiname%) do set sPATH=%%~di%%~pi
for %%i in (%Dateiname%) do set sFILE=%%~ni%%~xi
for /F "delims=. tokens=2" %%i in ("%Dateiname%") do set sPart2=%%i
:: Hier testen ob die Datei schon umbenannt ist
set ende="*_"
if %sPart2%==%ende% (
goto FilenameOld
) Else (
goto Umbenennen
)
::############### Sprungziele ########################
:Umbenennen
:: Dem Dateinamen ein Underbar dranhaengen
Set DateinameNeu=%sFile%_
:: In den Pfad wechseln
cd /d %sPath%
:: und Umbenennen
ren "%sFile%" "%DateinameNeu%"
exit 0
:FilenameOld
:: Den Underbar am Ende abschneiden
set OriName=%sFile:~0,-1%
:: In den Pfad wechseln
cd /d %sPath%
:: und Umbenennen
ren "%sFile%" "%OriName%"
exit 0
########################################################################
Dank & Grüße
Werner
PS: Ich weiss das es Kontextmenü Utilities gibt like rjhextension o.ä.
aber so mit einem Klick funktionieren die eben auch nicht
Ups... nochmal PS:
Betriebssystem Windows XP SP2
Intel 2,8 GHZ HT, 2 GB RAM
[Edit Biber] Code in ebensolche Tags gesetzt. Welcome auch von mir. [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 75931
Url: https://administrator.de/forum/problem-beim-umbenennen-von-dateinamen-if-else-75931.html
Ausgedruckt am: 28.04.2025 um 08:04 Uhr
3 Kommentare
Neuester Kommentar
Hallo qwertzy und willkommen im Forum!
Da Du das letzte Zeichen der Extension (damit also eigentlich das letzte Zeichen von sFILE - dies besonders auch, wenn eine Datei keine Extension oder auch einen oder mehrere "." im Namen hat) vergleichen willst, musst Du dies auch entsprechend angeben:
Anmerkung dazu: Die Setzung der Anführungszeichen für %ende% erst in der "if"-Zeile finde ich (hier) übersichtlicher.
Und da ich nun schon mal dabei bin:
"enabledelayedexpansion" ist in Deiner Version nicht erforderlich und sollte daher auch nicht verwendet werden, da es ansonsten Probleme bei Dateinamen/Pfaden mit enthaltenen "!" gibt (diese werden dann nämlich weg gelassen).
Auch die Zerlegung des Dateinamens in Einzelbestandteile ist (für den von Dir geschilderten Zweck) nicht nötig - gebraucht wird zum Umbenennen nur Name+Extension.
Ein gestraffte Fassung würde dann etwa so aussehen:
Noch zur Verwendung von "exit": Wenn Du nicht vorhast, damit einen Errorlevel an einen aufrufenden Batch zurückzugeben, solltest Du es durch "goto :eof" ersetzen - der Vorteil ist besonders beim Testen von der Kommandozeile ersichtlich. 
Grüße
bastla
[Edit] Da schon mal die Variable %ende% verwendet wird, diese auch konsequenter Weise beim Umbenennen einsetzen ...
Ansonsten (zugegebener Maßen etwas weniger ausführlich
):
[/Edit]
Da Du das letzte Zeichen der Extension (damit also eigentlich das letzte Zeichen von sFILE - dies besonders auch, wenn eine Datei keine Extension oder auch einen oder mehrere "." im Namen hat) vergleichen willst, musst Du dies auch entsprechend angeben:
set ende=_
if "%sFILE:~-1%"=="%ende%" (
Und da ich nun schon mal dabei bin:
"enabledelayedexpansion" ist in Deiner Version nicht erforderlich und sollte daher auch nicht verwendet werden, da es ansonsten Probleme bei Dateinamen/Pfaden mit enthaltenen "!" gibt (diese werden dann nämlich weg gelassen).
Auch die Zerlegung des Dateinamens in Einzelbestandteile ist (für den von Dir geschilderten Zweck) nicht nötig - gebraucht wird zum Umbenennen nur Name+Extension.
Ein gestraffte Fassung würde dann etwa so aussehen:
::
:: 09.12.2007 / 21:20:00
::
:: Dateien mittels Kontextmenü schnell umbenennen
:: Aus z.B. Diesesprogramm.exe wird Diesesprogramm.exe_
::
:: Ist die Datei auf diese Weise schon umbenannt wird sie
:: wieder zurückbenannt
@echo off & setlocal
:: Hier den Dateinamen (sFILE) setzen
for %%i in (%1) do set sFILE=%%~nxi
:: Hier testen ob die Datei schon umbenannt ist
set ende=_
if "%sFILE:~-1%"=="%ende%" (
goto FilenameOld
) Else (
goto Umbenennen
)
::############### Sprungziele ########################
:Umbenennen
ren %1 *.*%ende%
goto :eof
:FilenameOld
:: Den Underbar am Ende abschneiden
set OriName=%sFile:~0,-1%
:: und Umbenennen
ren %1 "%OriName%"
Grüße
bastla
[Edit] Da schon mal die Variable %ende% verwendet wird, diese auch konsequenter Weise beim Umbenennen einsetzen ...
Ansonsten (zugegebener Maßen etwas weniger ausführlich
@echo off & setlocal
set sFILE=%~nx1
if "%sFILE:~-1%"=="_" (ren %1 "%sFile:~0,-1%") Else ren %1 *.*_