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 30.06.2009 um 16:13:37 Uhr
<OT>
...Ziel ist es, die Dateien in ein anderes Verzeichnis zu kopieren und dabei umzubennen,
Notiz: RGC --> #407
</OT>
GELÖST

Dateinamen kürzen und vereinheitlichen

Frage Entwicklung Batch & Shell

Mitglied: Teasy30

Teasy30 (Level 1) - Jetzt verbinden

30.06.2009, aktualisiert 16:31 Uhr, 4356 Aufrufe, 10 Kommentare, 1 Danke

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?
Mitglied: miniversum
30.06.2009 um 16:21 Uhr
Vorausgesetzt dieser frei wähnbare text enthält kein - dann köntne es so gehen (ungetestet):

01.
@echo off 
02.
set "verz=c:\verzeichnis" 
03.
FOR /F "tokens=1,2 delims=-" %%i in ('dir /B "%verz%"\*.*') do call:umbennen "%%i" "%%j" 
04.
goto:eof 
05.
 
06.
:umbennen 
07.
set "firstpart=%~1" 
08.
rn "%verz%\%~1-%2" "%firstpart:~-4%-%2" 
09.
goto:eof
Bitte warten ..
Mitglied: LotPings
30.06.2009 um 16:54 Uhr
Zitat von miniversum:
Ich hab ja nur darauf gewartet das Biber auf das umbennen anspringt

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

01.
@Echo off&Setlocal 
02.
Set "Base=D:\Test" 
03.
Set "Dest=D:\Test\Ergebnis" 
04.
Set Ext=pdf 
05.
Pushd %Base% 
06.
For /L %%J in (2008,1,2015) Do For /F "Delims=" %%A in ( 
07.
'Dir /B /A-D "*%%J-*.%Ext%" 2^>NUL ') DO Call :Process %%J "%%~fA" "%%~nA" 
08.
Pause 
09.
goto :eof 
10.
:Process 
11.
Set "Name=%~3" 
12.
Call Set Nummer=%%Name:*%1-=%% 
13.
Set NeuerName=%1-%Nummer%.%Ext% 
14.
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
Bitte warten ..
Mitglied: bastla
30.06.2009 um 17:16 Uhr
@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?

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
Bitte warten ..
Mitglied: miniversum
30.06.2009 um 18:29 Uhr
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.
Bitte warten ..
Mitglied: Teasy30
30.06.2009 um 18:53 Uhr
> Zitat von miniversum:
Ich hab ja nur darauf gewartet das Biber auf das umbennen
anspringt


tschuldigung ... dachte, das muss man hier so schreiben
Bitte warten ..
Mitglied: Teasy30
30.06.2009 um 18:55 Uhr
Zitat von miniversum:
Vorausgesetzt dieser frei wähnbare text enthält kein - dann
köntne es so gehen (ungetestet):

01.
@echo off 
02.
> set "verz=c:\verzeichnis" 
03.
> FOR /F "tokens=1,2 delims=-" %%i in ('dir /B 
04.
> "%verz%"\*.*') do call:umbennen "%%i" 
05.
> "%%j" 
06.
> goto:eof 
07.
>  
08.
> :umbennen 
09.
> set "firstpart=%~1" 
10.
> rn "%verz%\%~1-%2" "%firstpart:~-4%-%2" 
11.
> goto:eof


Danke ... die erste Version hatte mich deutlich überfordert ... aber jetzt verstehe ich, worauf es hinausläuft ... werde das morgen mal testen und in mein script einbauen
Bitte warten ..
Mitglied: Biber
30.06.2009 um 20:31 Uhr
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
01.
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]
01.
>echo blubb>"Hund Katze Maus 2008-122332.pdf" 
02.
>echo bla>"Hein Blöd 2009-123456.pdf" 
03.
 
04.
>for %a in ("H* *.pdf") do @set "name=%a" & @echo move "%a" Zielverzeichnis\!name:~-15! 
05.
move "Hein Blöd 2009-123456.pdf" Zielverzeichnis\2009-123456.pdf 
06.
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
Bitte warten ..
Mitglied: miniversum
30.06.2009 um 20:51 Uhr
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.
Bitte warten ..
Mitglied: Teasy30
30.06.2009 um 21:15 Uhr
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
01.
for %a in (*.pdf) do set "name=%a" & move 
02.
> "%a" Zielverzeichnis\%name:~-15% (In Zukunft dann vielleicht 
03.
> :~-16) 
04.
> 


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.
Bitte warten ..
Mitglied: Biber
30.06.2009 um 21:40 Uhr
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...

Grüße
Biber
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

C und C++
Dateien in Ordner kopieren anhand vom Teil eines Dateinamen (22)

Frage von onlyforu8373 zum Thema C und C ...

Batch & Shell
gelöst PS-Skript anhand Dateinamen und zusätzlich Dateityp (Mapping) verschieben (2)

Frage von cleverm zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...