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

Frage Entwicklung Batch & Shell

GELÖST

Problem beim Umbenennen von Dateinamen (if - else)

Mitglied: qwertzy

qwertzy (Level 1) - Jetzt verbinden

13.12.2007, aktualisiert 21:56 Uhr, 4486 Aufrufe, 3 Kommentare

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.
01.
########################################################################## 
02.
 
03.
 :: 
04.
:: 09.12.2007 / 20:20:00 
05.
:: 
06.
:: Dateien mittels Kontextmenü schnell umbenennen 
07.
:: Aus z.B. Diesesprogramm.exe wird Diesesprogramm.exe_ 
08.
:: 
09.
:: Ist die Datei auf diese Weise schon umbenannt wird sie  
10.
:: wieder zurückbenannt 
11.
 
12.
@echo on & setlocal enableDelayedExpansion 
13.
 
14.
:: Erst mal den kompletten Dateinamen nebst Pfad setzen 
15.
Set Dateiname=%1 
16.
 
17.
:: Hier den Pfad (sPATH) und den Dateinamen (sFILE) und die 
18.
:: Extension (sPart2) setzen 
19.
 
20.
for %%i in (%Dateiname%) do set sPATH=%%~di%%~pi 
21.
for %%i in (%Dateiname%) do set sFILE=%%~ni%%~xi 
22.
for /F "delims=. tokens=2" %%i in ("%Dateiname%") do set sPart2=%%i 
23.
 
24.
:: Hier testen ob die Datei schon umbenannt ist 
25.
set ende="*_" 
26.
if %sPart2%==%ende% ( 
27.
goto FilenameOld 
28.
) Else ( 
29.
goto Umbenennen 
30.
31.
 
32.
::############### Sprungziele ######################## 
33.
 
34.
:Umbenennen 
35.
:: Dem Dateinamen ein Underbar dranhaengen 
36.
Set DateinameNeu=%sFile%_ 
37.
 
38.
:: In den Pfad wechseln 
39.
cd /d %sPath% 
40.
 
41.
:: und Umbenennen 
42.
ren "%sFile%" "%DateinameNeu%" 
43.
exit 0 
44.
 
45.
:FilenameOld 
46.
:: Den Underbar am Ende abschneiden 
47.
set OriName=%sFile:~0,-1% 
48.
 
49.
:: In den Pfad wechseln 
50.
cd /d %sPath% 
51.
 
52.
:: und Umbenennen 
53.
ren "%sFile%" "%OriName%" 
54.
exit 0 
55.
 
56.
########################################################################
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]
Mitglied: bastla
13.12.2007 um 21:24 Uhr
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:
01.
set ende=_ 
02.
if "%sFILE:~-1%"=="%ende%" (
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:
01.
:: 
02.
:: 09.12.2007 / 21:20:00 
03.
:: 
04.
:: Dateien mittels Kontextmenü schnell umbenennen 
05.
:: Aus z.B. Diesesprogramm.exe wird Diesesprogramm.exe_ 
06.
:: 
07.
:: Ist die Datei auf diese Weise schon umbenannt wird sie 
08.
:: wieder zurückbenannt 
09.
 
10.
@echo off & setlocal 
11.
:: Hier den Dateinamen (sFILE) setzen 
12.
for %%i in (%1) do set sFILE=%%~nxi 
13.
 
14.
:: Hier testen ob die Datei schon umbenannt ist 
15.
set ende=_ 
16.
if "%sFILE:~-1%"=="%ende%" ( 
17.
goto FilenameOld 
18.
) Else ( 
19.
goto Umbenennen 
20.
21.
 
22.
::############### Sprungziele ######################## 
23.
 
24.
:Umbenennen 
25.
ren %1 *.*%ende% 
26.
goto :eof 
27.
 
28.
:FilenameOld 
29.
:: Den Underbar am Ende abschneiden 
30.
set OriName=%sFile:~0,-1% 
31.
 
32.
:: und Umbenennen 
33.
ren %1 "%OriName%"
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 ):
01.
@echo off & setlocal 
02.
set sFILE=%~nx1 
03.
if "%sFILE:~-1%"=="_" (ren %1 "%sFile:~0,-1%") Else ren %1 *.*_
[/Edit]
Bitte warten ..
Mitglied: qwertzy
13.12.2007 um 21:45 Uhr
Hallo qwertzy und willkommen im Forum!

Danke

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:
01.
set ende=_ 
02.
> if 
03.
> "%sFILE:~-1%"=="%ende%" 
04.
> ( 
05.
> 
Anmerkung dazu: Die Setzung der
Anführungszeichen für %ende% erst
in der "if"-Zeile finde ich (hier)
übersichtlicher.

Ja, Ja, stimmt schon, aber so im Verlauf des Rumexperimentierens hat die
Struktur (und auch ein bissle mein Blutdruck ) gelitten.


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).

Da haste unbestritten recht


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.


Ich war schon froh, dass ich im I-Net so ne entsprechende FOR Kiste gefunden habe
Mit diesem FOR Gedöns steh ich nämlich erheblich aufm Kriegsfuss, so rein verständnis-
halber gesehen


</code>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

Stimmt!

Habs mal probiert...
und es funktionuckelt prächtlings

Vielen, vielen Dank
Wenn ich mal wieder Bauchschmerzen habe komme ich gerne wieder

Grüße
Werner
Bitte warten ..
Mitglied: bastla
13.12.2007 um 21:56 Uhr
Hallo qwertzy!

Mit diesem FOR Gedöns steh ich nämlich erheblich aufm Kriegsfuss, so rein verständnishalber gesehen
Dann lass es einfach weg - ist nämlich auch nicht erforderlich (siehe "Kurzfassung" oben).

Wenn ich mal wieder Bauchschmerzen habe komme ich gerne wieder
You're welcome.

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Windows Tools
Dateinamen automatisch umbenennen
Frage von chrisschmitt93Windows Tools2 Kommentare

Hallo zusammen, könnte mir freundlicherweise einer ein Skript zukommen lassen , das automatisch alle Ä in AE ,Ö ind ...

Batch & Shell
Dateinamen mit Powershell umbenennen ???
gelöst Frage von lexuraBatch & Shell2 Kommentare

Hallo, Ich benötige ein Script mit dem ich eine MP3 Sammlung umbenennen kann. Die Dateien lauten im Ursprung alle ...

Batch & Shell
Dateinamen Umbenennen nach Ersetzten
gelöst Frage von batchnewbieBatch & Shell9 Kommentare

Hallo, ich experimentiere ein wenig und bin ein einem Punkt, wo ich nicht weiter weiß. Ich lese ein Dateinamen ...

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
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 2 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 2 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 2 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 2 TagenSicherheit10 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
E-Mail
Erfahrungen mit hMailServer gesucht
Frage von it-fraggleE-Mail10 Kommentare

Hallo, meine neue Stelle möchte einen eigenen Mailserver. Ich als Linuxkind war direkt geistig mit Postfix dabei. Leider wollen ...

Firewall
Penetrationstester-Labor - Firewalls
Frage von Oli-nuxFirewall9 Kommentare

Mich würde interessieren warum man beim Einrichten eines Penetrationstester-Labor (VMs) die Firewall der Systeme deaktivieren soll? Hat das nur ...

Entwicklung
VBS: alle PDF-Dateien in einem Ordner gleichzeitig öffnen
gelöst Frage von JuweeeEntwicklung9 Kommentare

Hallo, ich habe in deiner Ordnerstruktur (.\Tagesberichte\xx.18\) mehrere dynamische PDF-Formulare (mit LCD erstellt). Die Berichtsformulare sind im Layout alle ...

Netzwerkgrundlagen
IPv6 Inter-VLAN Routing
gelöst Frage von clSchakNetzwerkgrundlagen8 Kommentare

Hi ich befasse mich gerade mit der Implementierung von IPv6 was bisher (in einem VLAN) korrekt funktioniert inkl. DNS ...