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

Teil des Datienames Umformen

Frage Entwicklung Batch & Shell

Mitglied: batchnewbie

batchnewbie (Level 1) - Jetzt verbinden

12.07.2014, aktualisiert 13.07.2014, 1190 Aufrufe, 11 Kommentare

Hallo allerseits,
Meine batch Kenntnisse sind nicht besonders, versuche jedoch alles allein zu machen und mich so weiter zu entwickeln.

Ich möchte Dateien in einem rutsch umbenennen, die in das Suchmuster passen,
jedoch nur ein Teil des Dateinames soll verändert werden.
Nur das Datum soll umgeformt werden, anstatt _ soll ein . rein.

ich_bin_12_07_2014_eine_datei.txt zu ich_bin_12.07.2014_eine_datei.txt
eine_12_07_2014_weitere_datei.txt zu eine_12.07.2014_weitere_datei.txt
usw. usf.

Bis jetzt habe ich das Umbenennen so gemacht (sehe Code), das ersetzt alle definierte Zeichen.
Wie kann ich es nur auf das Datum eingrenzt, bzw. nur auf Zahlen?

Mein Code
01.
@echo off &setlocal 
02.
 
03.
echo.>ich_bin_12_07_2014_eine_datei.txt 
04.
:: zu ich_bin_12.07.2014_eine_datei.txt 
05.
echo.>eine_12_07_2014_weitere_datei.txt 
06.
:: zu eine_12.07.2014_weitere_datei.txt 
07.
 
08.
for /f "delims=" %%i in ('dir /b /a-d *.txt^| findstr /rbc:".*[0-9][0-9]_[0-9][0-9]_[0-9][0-9][0-9][0-9].*"') do ( 
09.
	set "datei=%%~i" 
10.
	setlocal enabledelayedexpansion 
11.
	echo !datei! 
12.
	set "neudatei=!datei:_=.!" 
13.
	echo ren "!datei!" -^> "!neudatei!" 
14.
	echo. 
15.
	ren "!datei!" "!neudatei!" 
16.
	endlocal 
17.
)
Ich könnte das so machen:
set "neudatei=!datei:_01=.01!"
set "neudatei=!datei:_02=.02!"
usw. usf.
aber dann werden nicht alle Zahlen ersetzt und eine weitere Schleife wäre wohl nötig?
Eine universale Lösung wäre mir da lieber.

Da wird es doch eine einfachere Vorgehensweise geben??
Mitglied: rubberman
12.07.2014 um 16:46 Uhr
Hallo batchnewbie, willkommen im Forum.

Etwas mehr Input bitte. Du hast ja sicher nur Beispielnamen gepostet. Wie sieht das in der Realität aus? Ist die Anzahl Unterstriche vor dem Datum immer konstant? Oder ist die Länge des Dateinamens vor dem Datum immer konstant?

Grüße
rubberman
Bitte warten ..
Mitglied: colinardo
12.07.2014, aktualisiert um 17:55 Uhr
Moin,
falls du dich mal mit Powershell versuchen willst
01.
dir 'C:\Ordner\*.txt' | ?{$_.Basename -match '\d{1,2}_\d{1,2}_\d{4}'} | rename-item -NewName {$_.Name -replace '(\d{1,2})_(\d{1,2})_(\d{4})','$1.$2.$3'}
Grüße Uwe
Bitte warten ..
Mitglied: batchnewbie
12.07.2014 um 17:48 Uhr
@rubberman
Also, es sind jpg Bilder und die Dateinamen sind leider unterschiedlich lang vorn und hinter dem Datum, sonst hätte ich es schon per Tokens gelöst und vermutlich wird es auch nicht anders gehen, je nach der Vorn-Zeichenlänge werde ich es wohl dann zwei, drei Schleifen sein und dem dazugehörten Toknes.

@colinardo
Danke für den Powershell Code, bis jetzt habe ich mich noch nicht wirklich mit Powershell beschäftigt, die Kenntnisse sind da noch schlechter als mit Batch.
Bitte warten ..
Mitglied: rubberman
12.07.2014 um 18:43 Uhr
Hallo batchnewbie,

es gibt standardmäßig keinen Batchbefehl, der eine Ersetzung per "Regulärem Ausdruck" vornehmen kann (so wie es colinardo mit der PS vorgeturnt hat). Also wird's schwierig und du musst Alternativen finden. Ist ausgeschlossen, dass vor dem Datum bereits irgendwelche Zahlen im Dateinamen vorkommen?

BTW: Es gibt hervorragende Programme, die genau für das Umbenennen von Fotos entwickelt wurden.

Grüße
rubberman
Bitte warten ..
Mitglied: batchnewbie
12.07.2014 um 20:13 Uhr
Ja die Nummerierung ist Vorn 001_, 002_ usw. usf. hab ich ganz vergessen, da ich mich zu sehr auf das Datum konzentriert hatte.

Ja es geht viele Programme die das wohl mit Leichtigkeit schaffen, für mich ist das nur etwas Übung
Bitte warten ..
Mitglied: rubberman
LÖSUNG 12.07.2014, aktualisiert 13.07.2014
Na gut. Ich kitzle ja auch ganz gerne das Letzte aus Batch raus...

Teste
01.
@echo off &setlocal 
02.
for /f "delims=" %%i in ('dir /b /a-d *.txt ^| findstr /rc:".*[0-3][0-9]_[01][0-9]_20[0-9][0-9].*"') do ( 
03.
  set "fOld=%%~i" 
04.
  set "fNew=%%~i" 
05.
  setlocal EnableDelayedExpansion 
06.
  set "length1=0" 
07.
  REM alle Zahlen durch / ersetzen 
08.
  for %%j in (1 2 3 4 5 6 7 8 9 0) do set "fNew=!fNew:%%j=/!" 
09.
  REM Dateiname an der Zeichenfolge //_//_//// splitten 
10.
  for /f "delims=?" %%j in ("!fNew://_//_////=?!") do set "fNew=X%%j" 
11.
  REM Länge des 1. Teilstrings berechen 
12.
  REM   http://www.dostips.com/DtCodeCmdLib.php#Function.strLen 
13.
  for /l %%j in (12 -1 0) do ( 
14.
    set /a "length1 |= 1 << %%j" 
15.
    for %%k in (!length1!) do if "!fNew:~%%k,1!"=="" set /a "length1 &= ~1 << %%j" 
16.
17.
  REM Teilstring mit dem Datum extrahieren 
18.
  for %%j in (!length1!) do set "fNew=!fOld:~%%j,10!" 
19.
  REM in diesem Teilstring die Unterstriche durch Punkte ersetzen 
20.
  set "fNew=!fNew:_=.!" 
21.
  REM Länge bis zum ersten Zeichen nach dem Datum 
22.
  set /a "length2 = length1 + 10" 
23.
  REM Dateiname neu zusammensetzen 
24.
  for /f "tokens=1,2" %%j in ("!length1! !length2!") do set "fNew=!fOld:~,%%j!!fNew!!fOld:~%%k!" 
25.
  REM das ECHO und ggf. PAUSE entfernen, wenn du sicher bist dass die Ersetzung vernünftig funktioniert 
26.
  ECHO ren "!fOld!" "!fNew!" 
27.
  endlocal 
28.
29.
PAUSE
Ich hoffe die Kommentare helfen um zu verstehen. Die Zeichen / und ? verwende ich übrigens, weil sie nicht in einem Dateiname vorkommen können.

Grüße
rubberman
Bitte warten ..
Mitglied: Endoro
13.07.2014 um 07:13 Uhr
Hey rubberman,
Es müsste auch ohne die Ersetzungen gehen. Kanns leider grad nicht testen.
Gruss, Endoro
Bitte warten ..
Mitglied: batchnewbie
13.07.2014, aktualisiert um 10:59 Uhr
Hi,
da fällt mir außer eine große WOW nichts ein, vielen Danke, funktioniert wie es soll.

Ich habe selber noch versuche per:
01.
set "datei=!datei:01_=01.!" 
02.
set "datei=!datei:02_=02.!" 
03.
set "datei=!datei:_14_=_14.!" 
04.
:: usw. usf. 
05.
ren "%%i" "!datei!"
jedoch funktioniert das bei mir nicht wirtlich, da die Nummerierung Vorn auch umbenannt wird.
Bitte warten ..
Mitglied: rubberman
13.07.2014 um 12:09 Uhr
Hallo Endoro,

das erste was mir eingefallen ist, war von vorn tokenweise abzuschneiden und jedes mal mit findstr /b zu prüfen, ob das Datum vorn gelandet ist. Dann rufst du aber zig mal findstr als externes Tool auf, was am Ende eine Ewigkeit dauert und (wer weiß wie die Dateinamen tatsächlich aussehen) mehrfache konsekutive Unterstriche bekommst du dann auch nicht mehr vernünftig gehandhabt.
So ist wenigstens alles was nötig ist CMD-intern. Für die Ersetzung habe ich keine Alternative gefunden. Aber wenn dir noch 'ne andere Methode einfällt, kannst ja noch mal schreiben.

Grüße
rubberman
Bitte warten ..
Mitglied: Endoro
17.07.2014 um 21:16 Uhr
Hallo rubberman, ich war mit meinen Gedanken in der bash-Welt und du hast recht
Gruss, Endoro.
Bitte warten ..
Mitglied: rubberman
17.07.2014 um 23:37 Uhr
Ah, OK. Ich dachte ich könnte wieder was dazu lernen

Grüße
rubberman
Bitte warten ..
Ähnliche Inhalte
Server
Website teils nicht erreichbar
Frage von ianirieServer5 Kommentare

Hi! Ich habe folgendes Problem: Auf unserem Ubuntu-Test-Server liegt eine Website. Diese ist aus dem LAN immer erreichbar. Von ...

LAN, WAN, Wireless
Netzwerk in 2 Teile trennen
gelöst Frage von pattexLAN, WAN, Wireless12 Kommentare

Hallo zusammen, ich benötige mal die Tipps der Profis für folgende Aufgabe: Ich möchte ein bestehendes Gbit-Netzwerk mit 10 ...

Windows Server
Teil einer Aufgabe wird unter W2012R2 nicht ausgeführt
gelöst Frage von HenereWindows Server20 Kommentare

Hallo, ich habe ein Problem. Ich mache über die Aufgabenplanung eine Abfrage auf ein bestimmtes Ereignis in der Ereignisanzeige. ...

VB for Applications
In Binärdatei suchen und Teile ausschneiden
Frage von Haegar75VB for Applications4 Kommentare

Hallo, vielleicht kann mir jemand helfen Ich möchte mit vb.net in einer Binärdatei nach dem Vorkommen von drei Zeichen ...

Neue Wissensbeiträge
Microsoft Office

Office 2010 Starter erneut auf einer frischen Windows-Version installieren

Tipp von Lochkartenstanzer vor 22 StundenMicrosoft Office8 Kommentare

Moin, vor ein paar Tagen schlug bei mir ein Kunde auf, der sein Widnows 7 geschrottet und es inklusive ...

Datenbanken

Upgrade MongoDB 3.4 auf 3.6

Erfahrungsbericht von Frank vor 1 TagDatenbanken

Seit kurzem gibt es das 3.6 Update für die MongoDB: Sicherheit, das Sortieren, Aggregation und auch die Performance wurde ...

SAN, NAS, DAS

Backdoor Zugang und Upload-Bug in vielen Western Digital MyCloud Geräten

Information von Frank vor 1 TagSAN, NAS, DAS2 Kommentare

James Bercegay von der Firma Gulftech hat die Fehler an Western Digital gemeldet und das Unternehmen stellt bereits ein ...

Microsoft Office

Outlook 2016 - Beim Weiterleiten keine PDF Anhänge mehr - KB4011626 entfernen

Erfahrungsbericht von Deepsys vor 1 TagMicrosoft Office3 Kommentare

Wenn ihr feststellt das ihr beim Weiterleiten von E-Mails keine PDF Anhänge mehr versendent, dann dankt Microsoft. Diese tolle ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

iOS
Einladung vom iphone kalender
Frage von jensgebkeniOS15 Kommentare

Hallo Gemeinschaft, folgendes Problem - immer wenn ich von meinem Iphone einen Termin einztrage und diesem Termin Teilnehmer zuweise, ...

Windows Netzwerk
Drucker isolieren in Windows Domäne
gelöst Frage von lcer00Windows Netzwerk14 Kommentare

Hallo zusammen, habe eine Windows-AD (2012R2) in der es einen Druckerserver gibt. Mittlerweile verliere ich das Vertrauen in die ...

Drucker und Scanner
Gesucht DIN A3 Drucker
Frage von NebellichtDrucker und Scanner14 Kommentare

Hallo, ich möchte einen neuen DIN A3 Drucker kaufen. Um ab und zu, ca. 1 mal die Woche Farbausdrucke ...