uebeltat
Goto Top

Per Batch Dateinamen nach X Zeichen abschneiden (Endung beibehalten!)

Hallo Community,

ich habe tausende PDF-Dateien, alle unterschiedlich lang und in verschiedenen Ordnern...

Bsp:
4120135748353543435413.pdf
435875851535135.pdf
4863486443843846843.pdf

Diese Dateien will ich nach X Zeichen abschneiden, sprich das Ergebnis soll sein:


4120135748353.pdf
4358758515351.pdf
4863486443843.pdf

(der jeweilige Ordner soll gleich bleiben)


Leider komme ich nicht wirklich voran, die Beiträge hier auf der Seite haben mir auch nicht weitergeholfen face-sad

Aber ich weiß dass es hier wahrhaftige Batch-Profis gibt.

Kann mir jemand einen Denkanstoß bzw. eine Lösungsmöglichkeit anbieten?

Vielen lieben Dank vorab!

die uebeltat


@edit: Ich wollte nicht unhöflich wirken, Entschuldigung (:
Kommentar vom Moderator Biber am 29.02.2012 um 21:30:56 Uhr
Grummelnd verschoben von "Tools & Utilities" nach "Bätscht mir ma Shnell"

Content-ID: 181261

Url: https://administrator.de/forum/per-batch-dateinamen-nach-x-zeichen-abschneiden-endung-beibehalten-181261.html

Ausgedruckt am: 22.12.2024 um 17:12 Uhr

Biber
Biber 29.02.2012 um 21:28:30 Uhr
Goto Top
[OT]
Zitat von @uebeltat:
Ich habe tausende PDF-Dateien, alle unterschiedlich lang und in verschiedenen Ordnern...
Sind die denn wenigstens gleich breit? Denn "Batch" heisst eigentlich "Stapel" und eine gleiche Breite würde das Stapeln erleichtern.
Leider komme ich nicht wirklich voran, die Beiträge hier auf der Seite haben mir auch nicht weitergeholfen face-sad
Hmm - was hast du denn mit den Beiträgen gemacht? Lesen war es wohl kaum.

Aber ich weiß dass es hier wahrhaftige Batch-Profis gibt.
Aber auch echte Batch-Prolls.... wenn die dich beim Posten ohne Hallo und im Bereich "Tools & Utilities" erwischen, dann duzen die dich.

Ich verschieb den Beitrag mal ins richtige Forum - wahrscheinlich sind dir schon ein paar Oneliner geliefert worden, bevor ich damit fertig bin.

Dennoch - ich kann mir nicht vorstellen, dass dazu kein Musterlösungs-Beispiel in unserem Forum zu finden gewesen wäre.

Grüße
Biber
[/OT]
uebeltat
uebeltat 29.02.2012 um 21:31:58 Uhr
Goto Top
Hallo Biber,

danke dass du meinen Beitrag in die richtige Richtung bringst. Gelesen habe ich, zum Ziel hat mich jedoch kein Beitrag geführt. Was ich hier gefunden habe ist nicht das, was ich suche. Daher wende ich mich vertrauensvoll an das Forum.

Zu deiner Frage: Ja, alle vorhandenen Dateien sollen nach der gleichen Anzahl an Zeichen abgeschnitten werden.
bastla
bastla 29.02.2012 um 21:56:37 Uhr
Goto Top
Hallo uebeltat und Biber!

Der heutige "bastla to go" face-wink:
@echo off & setlocal enabledelayedexpansion
set "Ordner=D:\Ordner unter dem 1000e PDF-Dateien liegen"  
set "Typ=pdf"  
set /a Stellen=13

for /f "delims=" %%i in ('dir /s/b/a-d "%Ordner%\*.%Typ%"') do (  
    set "Name=%%~ni"  
    echo ren "%%i" "!Name:~,%Stellen%!%%~xi"  
)
Annahme: Es sollen alle zu findenden PDF-Dateien verarbeitet werden und es gibt keine, in deren Name ein "!" vorkommt.

Solange das "echo" vor dem "ren" steht, wird (zum Testen) das Umbenennen nur als Befehl angezeigt, aber noch nicht durchgeführt ...

Grüße
bastla

[Edit] @Biber: Sag doch was ... face-wink [/Edit]
Biber
Biber 29.02.2012 um 21:57:03 Uhr
Goto Top
Moin uebeltat,

na schön - die Kurzfassung eines möglichen Lösungsweges ist in folgender Demo am CMD-Prompt erkennbar:
d:\temp>for %i in (i:*.pdf) do @(set "fname=%~ni" & @echo ren "%~fi" "!fname:~,7!.*")
ren "i:\Dokus\Busobj.forumtopics\Prompt_ALL.pdf" "Prompt_.*"
ren "i:\Dokus\Busobj.forumtopics\DateLOVs.pdf" "DateLOV.*"
ren "i:\Dokus\Busobj.forumtopics\Excel_Universe.pdf" "Excel_U.*"
ren "i:\Dokus\Busobj.forumtopics\Rolling_12.pdf" "Rolling.*"
ren "i:\Dokus\Busobj.forumtopics\Dynamic_Universe.pdf" "Dynamic.*"
ren "i:\Dokus\Busobj.forumtopics\Cascading_Prompts.pdf" "Cascadi.*"

  • Der Oneliner wurde von mir am CMD-Prompt im Verzeichnis d:\temp eingetippselt - also nur die erste Zeile nach dem "d:\temp>"
  • durchgenudelt werden alle "(i:\*.pdf")-Dateien in dem auf i: zufällig aktiven Verzeichnis
  • jeden Namen (ohne Endung) ermittele ich als %~ni" und speichere ihn in eine Variable %fname%
  • von %fname% erhalte ich die ersten 8 Zeichen als %fname:~7% oder, wenn es innerhalb derselben CMD-Zeile sein soll, als !fname:~7! (wenn EnableDelayedExpansion aktiviert ist- bei mir defaultmäßig)
  • damit kann ich ein REName zusammenstoppeln.

Wenn es denn für Unterverzeichnisse sein soll: dann noch eine FOR/D-oder FOR/R Anweisung vorschalten.

Details findest du für die %Variablen% und "SubString"-Mimik in der Hilfe SET/?
Für FOR, FOR/F und FOR /D natürlich unter FOR/? -oder- hier im Forum in Friemlers Tutorial zur FOR-Anweisung (in "Batch & Shell")

Bitte versuche mal - für einen überschaubaren Zeitraum, z.B. 2 Stunden- dich deinem konkreten Problem etwas anzunähern und einen Ansatz, einen ehrenvollen Versuch hier zu posten.
Denn wenn du es einmal verstanden hast, dann wirst du es auch auf andere Problemchen transferieren können.

Wenn du gar nicht klarkommst -> wir sind hier.

Grüße
Biber
Biber
Biber 29.02.2012 um 22:03:24 Uhr
Goto Top
Moin bastla,

Zitat von @bastla:
Hallo uebeltat und Biber!

Der heutige "bastla to go" face-wink:
*grummel*... ich wollte es ja nicht heraufbeschwören, aber ich habe fast mit dir gerechnet... face-wink

Annahme: Es sollen alle zu findenden PDF-Dateien verarbeitet werden und es gibt keine, in deren Name ein "!" vorkommt.
Zusatzannahme: es ist nicht ausgerechnet das 14te Zeichen ein Leerzeichen.
Denn dann werden Dateien der Form "01234567890123[Leerzeichen}.pdf angelegt.
Das funktioniert schmerzfrei - aber einige Programme (auch PDF-verarbeitende!) gehen bei dem Namen auf die Bretter.

Grüße
bastla
Grüße zurück
Biber
Skyemugen
Skyemugen 01.03.2012 um 09:03:44 Uhr
Goto Top
Aloha bastla,

da ich gerade beim Bäcker war, wie sieht's aus mit eventuell im Nachhinein enstehenden Doppelten? face-wink

Wobei die Frage eher an den TE gehen müsste. aber was meinte er mit
Kann mir jemand einen Denkanstoß bzw. eine Lösungsmöglichkeit anbieten
?

Entweder will ich den Motor oder das ganze Auto ...

greetz André
bastla
bastla 01.03.2012 um 10:57:20 Uhr
Goto Top
Hallo Skye!
wie sieht's aus mit eventuell im Nachhinein enstehenden Doppelten?
Ich hoffe doch, dass sich der TE diese Frage bereits im Vorhinein gestellt und beantwortet hat ... face-wink

Grüße
bastla
uebeltat
uebeltat 05.03.2012 um 19:21:15 Uhr
Goto Top
Ich seid die Besten, vielen Dank! face-smile

Kurz noch die Antwort auf die Fragen: Das 14. Zeichen ist kein Leerzeichen und Doubletten gibt es auch nicht, da die ersten 13 Stellen immer unterschiedlich sind...

Vielen vielen Dank face-smile
Sisomyz
Sisomyz 03.11.2022 um 14:49:52 Uhr
Goto Top
Hallo,
bin zufällig über diese Antwort gestolpert... Gibt es auch einen Weg die letzten 10 Zeichen des Dateinamens zu behalten?

Danke
Gruß siso
4400667902
4400667902 03.11.2022 aktualisiert um 15:06:48 Uhr
Goto Top
Zitat von @Sisomyz:

Hallo,
bin zufällig über diese Antwort gestolpert... Gibt es auch einen Weg die letzten 10 Zeichen des Dateinamens zu behalten?

Danke
Gruß siso

@echo off &setlocal enabledelayedexpansion
for %%a in ("d:\ordner\*.pdf") do (set "basename=%%~na" &ren "%%a" "!basename:~-10!%%~xa")  
https://www.dostips.com/DtTipsStringManipulation.php
Sisomyz
Sisomyz 07.11.2022 um 11:03:09 Uhr
Goto Top
super, vielen Dank, das hab ich gesucht!