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

Dateiname kürzen bzw. umbenennen auf erste Zeichenkette

Frage Entwicklung Batch & Shell

Mitglied: 49791

49791 (Level 1)

19.06.2007, aktualisiert 18:26 Uhr, 9452 Aufrufe, 6 Kommentare

Hallo,

ich erhalte Dateien in z.B. folgenden Formaten

15437_18_984_384few.txt
1458_156_hjt_ut76.txt
438456_e86_gf486_5.txt

nun soll mit einer Batch-Datei alles hinter nach dem ersten _ (inkl des Unterstrichs) gelöscht werden, ausser das .txt, bzw muss das sonst wieder rangesetzt werden.

So sollte es dann aussehen

15437.txt
1458.txt
438456.txt

In diesem Forum gab es einige ähnliche Progleme, aber ich habe daraus leider keinen Lösungsweg gefunden, Sorry.

Wäre nett wenn mir jemand helfen könnte, Danke
Mitglied: miniversum
19.06.2007 um 17:21 Uhr
@for /F "delims=" %%a in ('dir /b /a-D *.txt') do (for /F "delims=_" %%b in ('echo %%a') do ren "%%a" "%%b%%~xa")

miniversum
Bitte warten ..
Mitglied: bastla
19.06.2007 um 17:23 Uhr
Hallo donklotz und willkommen im Forum!

Das Problem beim Umbenennen ist eigentlich immer die Frage, was zu tun ist, wenn schon eine Datei gleichen Namens existiert.

Bis diese Frage beantwortet ist, ein Versuch, die grundsätzliche Vorgangsweise zu demonstrieren: Die folgende Zeile kannst Du direkt (und solange das "@echo" drinnen steht, auch gefahrlos) am Commandprompt eingeben:
01.
for %f in (*_*.txt) do @for /f "delims=_" %n in ('echo %f') do <b>@echo</b> ren %f %n%~xf
Das angesprochene "@echo" bewirkt, dass der Vorgang nur angezeigt, aber nicht ausgeführt wird. Wenn Du das "@echo" entfernst, würden die Dateien tatsächlich umbenannt, ohne allerdings schon vorhandene Dateien zu überschreiben.

Grüße
bastla

[Edit] @miniversum: Immerhin Zweiter [/Edit]
Bitte warten ..
Mitglied: 49791
19.06.2007 um 17:37 Uhr
Hallo und vielen Dank euch beiden.

@ bastla:
ich bekomme diese Fehlermeldung:
"n" ist syntaktisch an dieser Stelle nicht verarbeitbar

und dann gibt er mir das aus

for n in ('echo f ~xf

mein code sieht momentan nur wie folgt aus:

d:
cd\
cd temp
for %f in (*_*.txt) do @for /f "delims=_" %n in ('echo %f') do @echo ren %f %n%~xf

Achso, wenn die Datei vorhanden ist (was eigentlich nicht sein kann), dann immer überschreiben.
Bitte warten ..
Mitglied: bastla
19.06.2007 um 17:45 Uhr
Hallo donklotz!

Die Fehlermeldung koimmt daher, dass der Code für eine Direkteingabe am Prompt, nicht für eine Batchdatei geschrieben war - in Batch sind jeweils 2 Prozentzeichen erforderlich, wie in der folgenden neuen Version:
01.
for %%f in (*_*.txt) do @for /f "delims=_" %%n in ('echo %%~f') do @echo move /y "%%~f" "%%n%%~xf"
Zur Sicherheit habe ich auch noch Anführungszeichen eingesetzt, obwohl es anscheinend keine Leerstellen in den Dateinamen gibt. Da Du ohnehin in das entsprechende Verzeichnis wechselst, sind keine Pfade berücksichtigt.

Grüße
bastla
Bitte warten ..
Mitglied: 49791
19.06.2007 um 18:02 Uhr
Perfekt.

Ich bedanke mich herzlichst.

Funktioniert einwandfrei.

Auch wenn ich den Code nicht verstehe
Bitte warten ..
Mitglied: bastla
19.06.2007 um 18:26 Uhr
Hallo donklotz!

Auch wenn ich den Code nicht verstehe
Vielleicht kann ich dem ein wenig abhelfen:

Das erste "for" geht in einer Schleife alle dem Muster "*_*.txt" entsprechenden Dateien durch. Jede einzelne Datei steht dann unter der Variable %f zur Weiterbehandlung zur Verfügung. Ein
01.
for %%f in (*_*.txt) do @echo %%f
könnte dies demonstrieren, indem nur die entsprechenden Namen angezeigt werden. Von der Kommandozeile müsste wieder jeweils nur %f geschrieben werden.

Das zweite "for" dient der Zerlegung des mit "echo %~f" angezeigten Dateinamens ("~" entfernt umgebende Anführungszeichen und müsste hier nicht verwendet werden, schadet aber nicht) anhand des Trennzeichens ("delimiter") "_", wobei nur der davor stehende Teil als %n weitergegeben wird.

Da bereits vorhandene Dateien gleichen Namens überschrieben werden sollen, wird kein "ren" verwendet, sondern der Verschiebebefehl "move" leicht zweckentfremdet. Da dieser Befehl (ebenso wie "copy") neben dem eigentlichen Hauptzweck auch Umbenennen kann, ist er hier perfekt geeignet (zusammen mit dem Schalter "/y", der eine automatische "Zustimmung zum Überschreiben vorhandener Dateien" bedeutet). Eigentlich wird also die Ausgangsdatei aus dem aktuellen Ordner "ausgeschnitten" und unter einem neuen Namen wieder eingefügt.

Mit "%~f" wird der aus der ersten Schleife übernommene Dateiname auf eine Schreibweise mit umgebenden Anführungszeichen gesetzt (zunächst ev bereits vorhandene mit "~" vorsorglich entfernt und dann neue hinzugefügt) und als Quelle verwendet. Das Ziel wird aus "%n" (= Namensteil vor dem ersten "_") und der ursprünglichen Extension (also ".txt") zusammengesetzt. Dieser Bestandteil des Namens kann mit "%~xf" extrahiert werden, wobei eben das "x" von "Extension" abgeleitet ist. Näheres dazu findest Du in der Hilfe zu "for" (for /?).

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Zeichenkette variable kürzen
gelöst Frage von snowdreamBatch & Shell2 Kommentare

Hallo zusammen, ich möchte einen String bearbeiten. Die Anzahl der Zeichen soll allerdings variabel sein, und genau hier komme ...

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

Neue Wissensbeiträge
Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 2 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 3 TagenWebbrowser7 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Sicherheit

Teamviewer Sessions können gekapert werden - Update tw. verfügbar

Information von sabines vor 3 TagenSicherheit6 Kommentare

In bestimmten Konstellationen können Teamviewer Sessions gekapert werden, wahrscheinlich aber ein recht unwahrscheinliches Szenario. Da der Teamviewer gerne für ...

Digitiales Fernsehen

Apple TV: Amazon Prime App ist verfügbar

Information von Frank vor 4 TagenDigitiales Fernsehen4 Kommentare

Die Amazon Prime Video App kann ab sofort auf einem Apple TV ab der 3 Generation installiert werden. Einfach ...

Heiß diskutierte Inhalte
Vmware
Installation Windows 10 VMware
Frage von Ghost108Vmware17 Kommentare

Hallo zusammen, versuche gerade mit Hilfe des vshpere clients eine virtuelle Windows 10 maschine aufzusetzen. 1. virtuelle Maschine erstellt ...

Exchange Server
SBS 2011 E-Mails können gesendet werden, aber nicht von extern empfangen
Frage von andreas1234Exchange Server14 Kommentare

Hallo Community, ich habe das Problem, dass seit knapp zwei Wochen die E-Mails von meinem SBS 2011 einwandfrei gesendet ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Windows Server
Server 2012 über Eingabeaufforderung devmgmt.msc geht nicht
gelöst Frage von achim222Windows Server9 Kommentare

Hallo, ich habe hier einen Server 2012 der im Reparaturmodus startet. Es liegt an einem falschen VirtIO Treiber für ...