teasy30
Goto Top

Dateinamen kürzen und vereinheitlichen

Hallo Gemeinde,

ich habe versucht, mir mit den zahlreich vorhandenen Forenbeiträgen selbst zu helfen, aber so ganz das Passende habe ich leider nicht gefunden.
Vielleicht kann mir ja einer den richtigen Denkansatz liefern.

In einem Verzeichnis werden täglich eine Anzahl Dateien gespeichert. Die Dateien haben als Dateiname immer folgenden Aufbau:

Variabler Text ... XXXX-YYYYYY.PDF

Der variable Text kann aus einem oder mehreren Wörtern bestehen und soll weg.
XXXX ist eine 4-stellige Jahreszahl (2008, 2009, 2010,...)
YYYYYY ist (derzeit) eine 6-stellige Zahl, kann aber in absehbarer Zeit eine 7. Stelle bekommen

Ziel ist es, die Dateien in ein anderes Verzeichnis zu kopieren und dabei umzubenennen, dass alles ab XXXX-YYYYYY.PDF stehen bleibt.


Also aus den Dateinamen:

Hund 2008-122332.PDF
Katze 2009-122555.PDF
Esel Kuh 2009-122566.PDF


sollen diese Dateinamen werden:

2008-122332.PDF
2009-122555.PDF
2009-122566.PDF


Wie kann ich hier vorgehen, um das in einer Batch Datei auszuführen?
Kommentar vom Moderator Biber am Jun 30, 2009 um 14:13:37 Uhr
<OT>
...Ziel ist es, die Dateien in ein anderes Verzeichnis zu kopieren und dabei umzubennen,
Notiz: RGC --> #407
</OT>

Content-Key: 119421

Url: https://administrator.de/contentid/119421

Printed on: April 19, 2024 at 07:04 o'clock

Member: miniversum
miniversum Jun 30, 2009 at 14:21:56 (UTC)
Goto Top
Vorausgesetzt dieser frei wähnbare text enthält kein - dann köntne es so gehen (ungetestet):

@echo off
set "verz=c:\verzeichnis"  
FOR /F "tokens=1,2 delims=-" %%i in ('dir /B "%verz%"\*.*') do call:umbennen "%%i" "%%j"  
goto:eof

:umbennen
set "firstpart=%~1"  
rn "%verz%\%~1-%2" "%firstpart:~-4%-%2"  
goto:eof
Mitglied: 77559
77559 Jun 30, 2009 at 14:54:03 (UTC)
Goto Top
Zitat von @miniversum:
Ich hab ja nur darauf gewartet das Biber auf das umbennen anspringt face-wink

Hier ist mein Ansatz der nur auf Jahreszahl im Bereich mit Strich reagiert.

@Echo off&Setlocal
Set "Base=D:\Test"  
Set "Dest=D:\Test\Ergebnis"  
Set Ext=pdf
Pushd %Base%
For /L %%J in (2008,1,2015) Do For /F "Delims=" %%A in (  
'Dir /B /A-D "*%%J-*.%Ext%" 2^>NUL ') DO Call :Process %%J "%%~fA" "%%~nA"  
Pause
goto :eof
:Process
Set "Name=%~3"  
Call Set Nummer=%%Name:*%1-=%%
Set NeuerName=%1-%Nummer%.%Ext%
Echo Copy %2 "%Dest%\%NeuerName%"  

Edit war ungestestet und hatte auch einen Dreher bei for /L, ein fehlendes %. Fehlermeldung unterdrückt. Alles korrigiert

Gruß
LotPings
Member: bastla
bastla Jun 30, 2009 at 15:16:08 (UTC)
Goto Top
@miniversum
Hast Du Dich so darauf konzentriert, Biber mit der Zeile 6 eine Freude zu machen, dass der "-" nach "delims=" auf der Strecke geblieben ist? face-wink

Zu "rn" sage ich aber nix (außer vielleicht, dass vor das %~1 ein %verz%\ passen könnte, vor allem, wenn Du oben das "Datei.txt" durch ein entsprechendes "dir /b ..." ersetzen würdest) ...

Grüße
bastla
Member: miniversum
miniversum Jun 30, 2009 at 16:29:26 (UTC)
Goto Top
Nein das kommt daher, dass ich faul war und das For kopiert habe, dann mein Kollege was von mir wollte und ich dann nicht fertig editiert habe. Das kommt vom ablenken lassen. Hätte er mir wenigstens gesagt das sich die eine Frau da unten gesonnt hat. Aber nein. Sowas seh ich natürlich erst beim heim gehen. Naja aber ich komme vom Thema ab... Ich korrigiere es oben.
Member: Teasy30
Teasy30 Jun 30, 2009 at 16:53:14 (UTC)
Goto Top
> Zitat von @miniversum:
Ich hab ja nur darauf gewartet das Biber auf das umbennen
anspringt face-wink


tschuldigung ... dachte, das muss man hier so schreiben face-wink
Member: Teasy30
Teasy30 Jun 30, 2009 at 16:55:14 (UTC)
Goto Top
Zitat von @miniversum:
Vorausgesetzt dieser frei wähnbare text enthält kein - dann
köntne es so gehen (ungetestet):

@echo off
> set "verz=c:\verzeichnis"  
> FOR /F "tokens=1,2 delims=-" %%i in ('dir /B  
> "%verz%"\*.*') do call:umbennen "%%i"  
> "%%j"  
> goto:eof
> 
> :umbennen
> set "firstpart=%~1"  
> rn "%verz%\%~1-%2" "%firstpart:~-4%-%2"  
> goto:eof


Danke ... die erste Version hatte mich deutlich überfordert face-wink ... aber jetzt verstehe ich, worauf es hinausläuft ... werde das morgen mal testen und in mein script einbauen
Member: Biber
Biber Jun 30, 2009 at 18:31:09 (UTC)
Goto Top
Moin Teasy30,

auch von mir ein Willkommen im Forum, Glückwunsch zu dieser leicht zu merkenden Memberid und danke für das Korrigieren dieses Umbenamsen-Unwortes.

Ich habe eben gerade eine Nachricht bzw. eine Nachfrage erhalten, wieso ihr da so ein "Projekt" draus macht.
Weil - wenn der zu erhaltende Namensteil doch immer jetzt 15, in Zukunft irgendwann 16 Zeichen wären, dann ginge es doch mit einer Zeile vom CMD-Prompt
for %a in (*.pdf) do set "name=%a" & move "%a" Zielverzeichnis\%name:~-15% (In Zukunft dann vielleicht :~-16)  

Die Idee ist schon gut, aber es funktioniert nur, wenn auch
  • "DelayedExpansion" gesetzt ist per "CMD /V" oder Registry
  • oder vor der FOR-Anweisung gesetzt wird (Setlocal EnableDelayedExpansion & FOR ...)

Aber zur Abrundung und zur Demo will ich Dir die Alternative zumindest weitergeben:
[Demo am CMD-Prompt]
>echo blubb>"Hund Katze Maus 2008-122332.pdf"  
>echo bla>"Hein Blöd 2009-123456.pdf"  

>for %a in ("H* *.pdf") do @set "name=%a" & @echo move "%a" Zielverzeichnis\!name:~-15!  
move "Hein Blöd 2009-123456.pdf" Zielverzeichnis\2009-123456.pdf  
move "Hund Katze Maus 2008-122332.pdf" Zielverzeichnis\2008-122332.pdf  

Wäre, wenn Du es eher gelegentlich brauchst, ein netter Plan B.

Grüße
Biber
Member: miniversum
miniversum Jun 30, 2009 at 18:51:23 (UTC)
Goto Top
Zitat von @Biber:
Ich habe eben gerade eine Nachricht bzw. eine Nachfrage erhalten,
wieso ihr da so ein "Projekt" draus macht.

Weil viel = besser ist und es wichtig aussieht und als ob viel Hirnschmalz reingesteckt worden wäre und so.
Hihi.
Und außerdem sollte es ja ne Batch Datei sein und überhaubt..
GRINS.

Ok ok genug gespammt... Ich leg mich wieder hin.
Member: Teasy30
Teasy30 Jun 30, 2009 at 19:15:38 (UTC)
Goto Top
Zitat von @Biber:
Moin Teasy30,

auch von mir ein Willkommen im Forum, Glückwunsch zu dieser
leicht zu merkenden Memberid und danke für das Korrigieren dieses
Umbenamsen-Unwortes.

Ich habe eben gerade eine Nachricht bzw. eine Nachfrage erhalten,
wieso ihr da so ein "Projekt" draus macht.
Weil - wenn der zu erhaltende Namensteil doch immer jetzt 15, in
Zukunft irgendwann 16 Zeichen wären, dann ginge es doch mit
einer Zeile vom CMD-Prompt
for %a in (*.pdf) do set "name=%a" & move  
> "%a" Zielverzeichnis\%name:~-15% (In Zukunft dann vielleicht  
> :~-16)
> 


Danke für das herzliche Willkommen und gern geschehen ... manchmal ist der Finger wirklich schneller als das Hirn ...

warum ich das lieber "perfekt" haben will? ganz einfach, in 3 Monaten oder 3 Jahren oder wann auch immer weiss keiner mehr, wo man welche Zahl ändern muss ... ausserdem bin ich ein wenig fasziniert, was mit dieser "holprigen" Programmiersprache tatsächlich machbar ist, wenn man sich ein wenig länger damit beschäftigt ... wird allerdings noch ein Weilchen dauern, bis ich halbwegs in der Lage sein werde, so was auch nur annähernd selbst zu stricken.
Member: Biber
Biber Jun 30, 2009 at 19:40:13 (UTC)
Goto Top
Moin Teasy30,

*lach*
okay, mit der Forderung nach Lesbarkeit, Wartbarkeit und nach Möglichkeit sogar hin und wieder einer eingestreuten Kommentarzeile rennst Du bei mir offene türen ein.
Andererseits ... ich schieße gerne solche CMD-Oneliner schon deshalb ganz gerne mal ab, weil
  • erfahrungsgemäß ein Batch, der vor 4 Monaten tadellos funktioniert hat und den ich HEUTE wieder blind anstarte mit hoher Wahrscheinlichkeit auf die Bretter geht - Pfade oder Konventionen haben sich geändert etc
  • ich noch größere Schwierigkeiten habe, abgespeicherte Bätche überhaupt wiederzufinden... auf den Rechnern, auf denen ich abwechselnd arbeite

Aber BTW - auch an einer anderen Aussage ist zu erkennen, dass Du im IT-Bereich unterwegs bist:
warum ich das lieber "perfekt" haben will..
Es sprach niemand von "perfekt"... es ging um "Projekt".
Wer so etwas per Freudscher Fehlschaltung gleichsetzt, der MUSS einfach ITler sein... face-wink

Grüße
Biber