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
Kommentar vom Moderator Biber am 02.02.2010 um 19:34:16 Uhr
Challenge mit einem Batch beim Umbennen...
#rgc = 643
ich habe eine Challenge mit dem Umbennen von Dateien mit einem Batch File
#rgc = 644
Ich würde gerne alle '.' im File Namen (Z.B. eins.zwei.drei.txt) in '-' (eins-zwei-drei.txt) umbennen.
#rgc =645
Ein "Umbennen" hatten wir schon oft, aber noch nie so viele im Zusammenhang mit der Challenger...
Muss ein Mehr-Sitzer sein...
GELÖST

Challenge mit einem Batch beim Umbennen von Files mit einem Punkt im Namen gesucht

Frage Entwicklung Batch & Shell

Mitglied: thomas2010

thomas2010 (Level 1) - Jetzt verbinden

02.02.2010, aktualisiert 19:36 Uhr, 3592 Aufrufe, 12 Kommentare

Hallo Alle,

ich habe eine Challenge mit dem Umbennen von Dateien mit einem Batch File
(Es sind sehr viele Files und deswegen will ich das automatisieren).

Ich würde gerne alle '.' im File Namen (Z.B. eins.zwei.drei.txt)
in '-' (eins-zwei-drei.txt) umbennen.

Ich habe mir die Beispiele von den anderen Umbenennen Fragen angesehen aber ich
bekomms leider nur hin das alle und damit leider auch
das letzte '.' im Beispiel '.txt' (File Endung) umbenannt werden.

Kann mir irgend jemand Bitte helfen oder einen Tipp geben wie man das richtig mit
einem Batch macht und das letzte '.' im File Namen beim umbenennen bestehen bleibt?

Grüße
Thomas
Mitglied: dog
02.02.2010 um 19:09 Uhr
Ungetestet mit VBS etwa so:
01.
Dim file, name,first, newName 
02.
 
03.
Set filesys = CreateObject("Scripting.FileSystemObject") 
04.
Set folder  = filesys.GetFolder("C:\Ordner") 
05.
Set files   = folder.Files 
06.
 
07.
For Each file in files 
08.
	name = StrReverse(file.Name) 
09.
	first = InStr(name,".") 
10.
	newName = Replace(name,"-",".",(first+1)) 
11.
	file.Name = StrReverse(newName) 
12.
Next
Bitte warten ..
Mitglied: miniversum
02.02.2010 um 19:15 Uhr
Ungstestete version:
01.
@echo off 
02.
FOR /F "delims=" %%i in ('dir /b "C.\dateien\*.*"') do call:umbenennen "%~ni" "%~xi" 
03.
goto:eof 
04.
 
05.
:umbenennen 
06.
set "name=%~1" 
07.
ren "C.\dateien\%~1%~2" "%name:.=-%%~2"
Bitte warten ..
Mitglied: 76109
02.02.2010 um 22:20 Uhr
Hallo Dog!

Dein Skript wird nicht funktionieren. Die Dateierweiterung geht verloren und bei Replace ist die Reihenfolge vertauscht ("-", "." anstatt ".", "-")

Alternativ sollte das gehen (*.vbs):
01.
Const Path = "C:\Ordner" 
02.
 
03.
Dim Folder, File, oldName, newName 
04.
 
05.
Set Folder = CreateObject("Scripting.FileSystemObject").GetFolder(Path) 
06.
 
07.
For Each File In Folder.Files 
08.
    oldName = Split(StrReverse(File.Name), ".", 2) 
09.
    newName = Replace(StrReverse(oldName(1)), ".", "-") & "." & StrReverse(oldName(0)) 
10.
    If File.Name <> newName Then File.Name = newName 
11.
Next
Gruß Dieter
Bitte warten ..
Mitglied: dog
02.02.2010 um 22:29 Uhr
Ja, ich habe beim Beitrag nicht richtig aufgepasst
Bitte warten ..
Mitglied: 76109
02.02.2010 um 22:33 Uhr
Hallo Dog!

Das passiert mir ab und zu auch

Gruß Dieter
Bitte warten ..
Mitglied: edepfau
03.02.2010 um 09:43 Uhr
getestete Version:
01.
cd /d "C:\Ordner" 
02.
FOR /R %%i in ("*.*") do call :umbenennen "%%~pi" "%%~ni" "%%~xi" 
03.
goto :EOF 
04.
 
05.
:umbenennen  
06.
REM path name_only ext 
07.
set "name=%~2"  
08.
ren "%~1%~2%~3" "%~1%name:.=-%%~3"
Unterschied: der voll Pfad wird mitgenommen, die Verzeichnisse werden rekursiv durchlaufen.

Gruss,
Ede
Bitte warten ..
Mitglied: Biber
03.02.2010 um 11:01 Uhr
Moin edepfau,


Zitat von edepfau:
getestete Version:
Mag sein... aber wenn das Ergebnis des Test doch so war wie es aufgrund des Codes sein muss...
Dann solltest du besser ein paar Smilies dahintersetzen.... sonst benutzt noch irgendjemand den Schnipsel.

Andererseits...
.. es gab auch mal eine Zahnpasta, die sich verkauft hat wie blöd... auch nur wegen des Slogans "Klinisch getestet".
Und die hatten auch nie das Ergebnis des Tests mit angegeben.

01.
> cd /d "C:\Ordner" 
02.
> FOR /R %%i in ("*.*") do call :umbenennen "%%~pi" "%%~ni" "%%~xi" 
03.
> goto :EOF 
04.
>  
05.
> :umbenennen  
06.
> REM path name_only ext 
07.
> set "name=%~2"  
08.
> ren "%~1%~2%~3" "%~1%name:.=-%%~3" 
09.
> 
Unterschied: der voll Pfad wird mitgenommen, die Verzeichnisse werden rekursiv durchlaufen.

Gruss,
Ede

Kann aus zwei Gründen zwar keinen Schaden anrichten, aber auch nie funktionieren

  • Wenn beim Umbenennen "alterName"=="neuerName" ist, dann geht natürlich ein "REN alterName neuerName" in die Grütze.

  • selbst wenn Dateien gefunden worden wären mit "neuerName ist anders als alterName", also mit zu ersetzendem Punkt im Dateinamen, dann wäre der REN-Befehl daran gescheitert, dass bei Alt- UND bei Neu-Datei jeweils der Pfad mit angegeben ist. Das darf nicht.

Neuer Versuch (Prädikat "getestet und für ausbaufähig befunden")
01.
@echo off & setlocal 
02.
FOR /R "D:\Biber" %%i in ("*.*") do call :umbenennen "%%~fi" 
03.
goto :EOF 
04.
 
05.
:umbenennen  
06.
:: den Namen (ohne Ext) in eine Variable speichern zum Suchen/ersetzen 
07.
Set "name=%~n1"  
08.
:: Punkt durch Minus ersetzen 
09.
Set "Name=%name:.=-%" 
10.
:: Wenn kein Punkt im Namen war bzw. NameVorher gleich NameNachher.ZURÜCK 
11.
If "%name%"=="%~n1" goto :eof 
12.
:: sonst : Umbenamsen HIER NUR ANGEDEUTET mit ECHO 
13.
Echo ren "%~1" "%name%%~x1"
Ergebnis/Ausgabe eines Aufrufs der Batchdatei "edeV.cmd"
>z:\austausch\edev.cmd 
ren "D:\Biber\downloads\KDiff3Setup_0.9.95.exe" "KDiff3Setup_0-9-95.exe" 
ren "D:\Biber\downloads\seamonkey-1.1.16.de-AT.win32.zip" "seamonkey-1-1-16-de-AT-win32.zip"
Von allen Dateien in der Teilstruktur "D.\Biber" haben einzig die beiden angezeigten Dateien einen/mehrere Punkte im Namen.
Und für die wird angezeigte REN-Anweisung generiert

Grüße
Biber
Bitte warten ..
Mitglied: edepfau
03.02.2010 um 13:17 Uhr
Sehr guter Hinweis auf die Syntax von ren. Der Pfad darf beim Ersatznamen nicht angegeben werden.
Auch die Aufnahme des Anfangspfads in die "for"-Schleife ist gut, sehr kompakt. Kannte ich nicht.

Der andere Einwand, dass ren "abc" "abc" zu einem Fehler führt, stimmt zumindest bei mir nicht (W2K, cmd-Fenster). Vielleicht aber unter DOS.
Ohne IF-Abfrage und doppelte Ersetzungen spart man eine Menge Zeit, wenn es um Tausende von Ordnern geht.

01.
@echo off & setlocal enableextensions                 
02.
FOR /R "C:\Ordner" %%i in ("*.*") do call :umbenennen "%%~pi" "%%~ni" "%%~xi" 
03.
goto :EOF 
04.
 
05.
:umbenennen  
06.
REM path name_only ext 
07.
set "name=%~2"  
08.
ren "%~1%~2%~3" "%name:.=-%%~3" || echo FEHLER bei "%~1%~2%~3" 
09.
 
Gruss,

Ede
Bitte warten ..
Mitglied: Biber
03.02.2010 um 14:17 Uhr
Moin edepfau,

Hier hast du recht...
Der andere Einwand, dass ren "abc" "abc" zu einem Fehler führt, stimmt zumindest bei mir nicht (W2K, cmd-Fenster). Vielleicht aber unter DOS.

Das habe ich nicht überprüft (sondern nur den oft gelesenen Fehlertext "Datei nicht gefunden oder doppelter Dateiname" im Hinterkopf bzw. unterstellt).

In der Tat ist es aber so, dass der Versuch einer Datei-Umbenamsung auf den bereits vorhanden Namen nicht als "Fehler" gewertet wird
Beispiel:
01.
>echo xx>test23.txt 
02.
>ren test23.txt test23.txt ||echo fehler 
03.
{... echoes nothing..}
Und noch redmondiger - nicht nur, dass kein Fehler gemeldet wird... er macht es auch tatsächlich..
Eine Variation
ren test23.txt Test23.txt
.... hinterlässt wirklich eine "Test23.txt"-Datei mit einem gross geschriebenen "T" ...

So wie die Mädels möchte ich auch programmieren können...

Grüße
Biber
Bitte warten ..
Mitglied: thomas2010
04.02.2010 um 18:11 Uhr
Hallo Biber,

erstmal Danke für die gute wirklich interessante Lösung.
Auch Danke an die anderen der Diskussion.
Wieder einiges dazu gelernt!

Eine kleine Sache ist mir aber noch nicht ganz klar.

:: Punkt durch Underline ersetzen
set "name=%name:.=_%"
xxxx

Das ':' steht für ersetzen?
Wo sind solche Sachen eigenlich dokumentiert?
Ich habe im Netz mal gesucht habe aber zu dem speziellen set nichts gefunden.

Gruß
Thomas
Bitte warten ..
Mitglied: miniversum
04.02.2010 um 18:33 Uhr
starte die cmd und gib dort
set /?
ein. Da steht das.
Funktioniert auch bei anderen Befehlen ;)
Bitte warten ..
Mitglied: Biber
04.02.2010 um 18:37 Uhr
Moin thomas2010,

zu deinen Rest/Folgefragen
Das ':' steht für ersetzen?
Jein.... siehe unten.

Wo sind solche Sachen eigenlich dokumentiert?

Das wirst du jetzt gar nicht glauben, ist aber ernst gemeint:
Am heimischen Rechner in einem geöffneten CMD-Fenster.
Da gibt es zu jedem internen/externen mitgelieferten Kommandozeilen-Befehl eine Hilfe durch einfachen Aufruf von "DerBefehl /?"

Und die ist eigentlich gar nicht schlecht und verglichen mit dem Internet regelrecht werbefrei.
Beispiel am CMD-Prompt wäre die Hilfe zum Befehl SET, wo ja vielleicht nicht nur etwas zum SETzen von Variablen steht, sondern auch etwas zur UmSETzung..

> SET /? 
..... 
.... 
Das Ersetzen von Umgebungsvariablen wurde folgendermaßen erweitert: 
 
    %PATH:str1=str2% 
 
Dies erweitert die PATH-Umgebungsvariable, wobei jede Instanz von "str1" im 
erweiterten Ergebnis mit "str2" ersetzt wird. "str2" kann die leere 
Zeichenfolge sein, um alle Instanzen von "str1" aus der erweiterten Ausgabe zu 
löschen. Wenn "str1" mit einem Sternchen beginnt, steht "str1" für alles 
zwischen dem Anfang der erweiterten Ausgabe bis zum ersten Auftreten des 
übrigen Abschnitts von "str1". 
..... 
....
Ich habe im Netz mal gesucht habe aber zu dem speziellen set nichts gefunden.
Irgendwo zwischen den Extremen "ganz triste Hilfe zu CMD-Befehlen auf einem bernsteinfarbenen 25x80 Monitor" und "quietschbunte Kiddiesprechblasen im Netz" könntest du ja mal die Suchfunktion auf dieser Seite ausprobieren (oben rechts zu sehen).

Zu Batch- und Skripting-Themen haben wir schon ein oder zwei Antworten hier geben können, die so insgesamt als ganz brauchbar beurteilt wurden.

Grüße
Biber
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (12)

Frage von Motte990 zum Thema Microsoft Office ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...