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
GELÖST

Dateinamen prüfen und evtl. umbenennen

Frage Entwicklung Batch & Shell

Mitglied: Hausen

Hausen (Level 1) - Jetzt verbinden

02.09.2010 um 14:06 Uhr, 5723 Aufrufe, 6 Kommentare

Hallo Forum,

ich habe in einem Ordner mehrere pdf-Dateien die wie folgt aussehen:

OB1.pdf
OB82.pdf
OB100.pdf
FC1.pdf
FC20.pdf
FC100.pdf
UDT1.pdf
UDT2.pdf

usw...

Wie oben schon geschrieben möchte ich diese Dateien nun umbenennen und zwar wie folgt.
Ich möchte überprüfen welche Anzahl an Zahlen der Dateiname enthält und diese entsprechend
mit Nullen auffüllen, so dass immer 3 Zahlen im Dateinamen enthalten sind. Die Nullen sollen
immer vor der vorhandenen Zahl eingefügt werden.
Es sollte danach dann so ausshen

OB001.pdf
OB082.pdf
OB100.pdf
FC001.pdf
FC020.pdf
FC100.pdf
UDT001.pdf
UDT002.pdf

Kann mir da jemand Helfen?

Danke und Gruss

Norbert
Mitglied: LotPings
02.09.2010 um 20:15 Uhr
Hallo Norbert,
die folgende Batchdatei verarbeitet alle Pdf-Dateien im aktuellen Verzeichnis deren Namen eine beliebige Anzahl Buchstaben gefolgt von mindestens einer Ziffer beinhaltet.
01.
:: Trail#3pl.cmd ::::::::::::::::::::::::::::::::::::::::::::::::::::: 
02.
@Echo off 
03.
For /f "delims=" %%A in ( 
04.
  'Dir /B/A-D *.pdf ^|findstr /i "[a-z][a-z]*[0-9][0-9]*\.pdf" ' 
05.
    ) Do For /f "tokens=1 delims=0123456789" %%B in ( 
06.
      "%%~nA" 
07.
        ) do Call :Proc "%%~fA" "%%B" 
08.
Pause 
09.
goto :Eof 
10.
:Proc 
11.
Set "Name=%~n1" 
12.
Set "Prefix=%~2" 
13.
Call Set Zahl=100%%Name:%Prefix%=%% 
14.
If %Zahl% GTR 10099 goto :Eof 
15.
Echo Ren %1 "%Prefix%%Zahl:~-3%%~x1" 
16.
Ren %1 "%Prefix%%Zahl:~-3%%~x1"
Wenn die Ausgabe auf dem Bildschirm korrekt erscheint, das Echo in der letzten Zeile (und ggfs den Pause Befehl) entfernen.
Auf Wunsch erläutere ich gerne den Algorhytmus.

Gruß
LotPings

Edit: Einige Änderungen eingebaut (unter anderem Fehler bei 2. Durchlauf mit führenden Nullen)
Bitte warten ..
Mitglied: Biber
02.09.2010 um 21:14 Uhr
Moin Hausen und Lordchen,

wir befinden uns in einem Forum, in dem ich mich über ganz oft über den abschliessenden Kommentar eines Fragestellers freue,
wenn aus diesem Kommentar ein "Ahhh, JETZT hab ich's verstanden!" durchklingt.
Ist mir 100 mal lieber als ein "Danke, klappt."

Der Unterbereich "Batch & Shell", in dem wir uns hier befinden, ist zudem ein Unter-Unterbereich von "Entwicklung".
Und für mich gehört zum "Entwickeln" auch das Verstehen (bzw. das Verständlich-Machen) der Strategie, des Algorithmus dazu.

Von daher, @LotPings, bin ich natürlich spontan begeistert von der guten Idee und der eleganten Umsetzung.
Aber mit dem Angebot "Auf Wunsch erläutere ich gerne..." eher unglücklich.

Ich würde die letzte Zeile noch dahingehend abändern, dass nicht versucht wird, Dateien umzubenamsen, die schon der "neuen" Namenskonvention entsprechen.

Also:
01.
::..... 
02.
:: Statt bisher letzte Zeile: 
03.
::echo Ren %1 "%Prefix%%Zahl:~-3%%~x1" 
04.
::-- jetzt neu letzte Zeile 
05.
if "%~n1" NEQ "%Prefix%%Zahl:~-3%" echo Ren %1 "%Prefix%%Zahl:~-3%%~x1"
unterschied (zuerst mit alter Zeile, zweiter Durchlauf mit neuer letzter Zeile):
>Lotpinx_Trail#3pl.cmd 
if "test1" NEQ "test001" Ren "F:\schnipsel\test1.pdf" "test001.pdf" 
if "test21" NEQ "test021" Ren "F:\schnipsel\test21.pdf" "test021.pdf" 
if "test231" NEQ "test231" Ren "F:\schnipsel\test231.pdf" "test231.pdf" 
Drücken Sie eine beliebige Taste . . . 
 
(=21:09:42  F:\schnipsel=) 
>Lotpinx_Trail#3pl.cmd 
Ren "F:\schnipsel\test1.pdf" "test001.pdf" 
Ren "F:\schnipsel\test21.pdf" "test021.pdf" 
Drücken Sie eine beliebige Taste . . .
Grüße
Biber
Bitte warten ..
Mitglied: Hausen
03.09.2010 um 08:37 Uhr
Hallo LotPings und Biber,

astrein, genau das was ich brauche. Über eine Erläuterung wäre ich sehr dankbar. Verstehe leider nicht alles.

Habe nur ein Problem . Im Dos-Fenster zeigt er mir alles richtig an und meldet auch keine Fehler aber er benennt die
Dateien nicht um.

Habe die Dateien und den Ordner auch mal an eine andere stelle kopiert, ohne Erfolg.
Das einzige was ist, wenn ich auf die Ordnereigenschaften gehe, ist schreibgeschützt angehackt aber gegraut.
Kann das aber nicht abwählen bzw. ist ist der hacken weg und danach direkt wieder da.

Könnt Ihr Euch das erklären?

Gruss Norbert

P.S. Arbeite mit XP SP3
Bitte warten ..
Mitglied: LotPings
03.09.2010 um 12:25 Uhr
Hallo Norbert,

Ich gehe mal davon aus das du den Echo-Befehl entfernt hattest?
Ansonsten hört es sich nach einem Rechte/Schreibschutz-Problem an, schau mal mit attrib *.pdf nach.

@Biber, stimme dir vorbehaltlos zu, war gestern etwas Erklärungsmüde

Zur Erläuterung:
die erste For-Schleife in Z3 nudelt alle vom Dir kommenden und von dem regulären Ausdruck des Find auf Buchstaben/Ziffern gefilterten pdf-Dateien durch,
die zweite For-Schleife in Z5 trennt das Prefix (=token 1) von der folgenden Zahl ab indem alle Ziffern als delimiter gesetzt werden.
Mit dem kompletten Dateinamen als Argument 1 und dem ermittelten Prefix als Argument 2 wird die Subroutine Proc aufgerufen.
In der Sub :Proc wird nur der Namensbestandteil der Variable Name und Arg2 der Variable Prefix zugewiesen
Der Pseudo Call in Z13 dient in Verbindung mit gedoppelten %-Zeichen zur verzögerten Auswertung von
%%NAME:%Prefix%=%% dies löscht den ermittelten Prefix aus dem Namen so das nur die Zahl übrig bleibt.
Z13 musste ich ändern weil der alte Set /A Probleme mit bereits enthaltenen führenden Nullen hatte
Da durch den Find sichergestellt ist, das wirklich nur Ziffern in der Zahl sind, und ich nur umbenennen will, wenn weniger als 3 Stellen vorhanden sind hänge ich vor die Zahl 100, ist Zahl größer als 10099 brauche ich nichts zu tun und verlasse die Sub. Dies erübrigt dann auch Bibers zusätzliche If-Abfrage.

Gruß
LotPings
Bitte warten ..
Mitglied: Hausen
03.09.2010 um 13:17 Uhr
Hallo zusammen,

habe den Fehler gefunden

bei dem Änderungsvorschlag von Bieber hat sich der Fehlerteufel eingeschlichen

01.
::-- jetzt neu letzte Zeile 
02.
if "%~n1" NEQ "%Prefix%%Zahl:~-3%" echo Ren %1 "%Prefix%%Zahl:~-3%%~x1"
In der Zeile muss das "echo" entfernt werden

01.
::-- jetzt neu letzte Zeile 
02.
if "%~n1" NEQ "%Prefix%%Zahl:~-3%" Ren %1 "%Prefix%%Zahl:~-3%%~x1"
So das der funktionierende Code wie folgt aussieht:

01.
:: Trail#3pl.cmd ::::::::::::::::::::::::::::::::::::::::::::::::::::: 
02.
@Echo off 
03.
For /f "delims=" %%A in ( 
04.
  'Dir /B/A-D *.pdf ^|findstr /i "[a-z][a-z]*[0-9][0-9]*\.pdf" ' 
05.
    ) Do For /f "tokens=1 delims=0123456789" %%B in ( 
06.
      "%%~nA" 
07.
        ) do Call :Proc "%%~fA" "%%B" 
08.
Pause 
09.
goto :Eof 
10.
:Proc 
11.
Set "Name=%~n1" 
12.
Set "Prefix=%~2" 
13.
Call Set Zahl=100%%Name:%Prefix%=%% 
14.
If %Zahl% GTR 10099 goto :Eof 
15.
Echo Ren %1 "%Prefix%%Zahl:~-3%%~x1" 
16.
if "%~n1" NEQ "%Prefix%%Zahl:~-3%" Ren %1 "%Prefix%%Zahl:~-3%%~x1"
Herzlichen Dank Euch beiden für die rasche und kompetente Hilfe!!

Gruss Norbert
Bitte warten ..
Mitglied: LotPings
03.09.2010 um 13:24 Uhr
Hallo Norbert,

wie ich in der Erläuterung schrieb, ist in der obigen Version die zusätzliche If-Abfrage in Z16 Hyperfluid = überflüssig.
Bereits 3-Stellige Zahlen passieren nicht durch die Zeile 14.

Gruß
LotPings
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

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

Frage von cberndt zum Thema Batch & Shell ...

Visual Studio
gelöst Remotedienst prüfen mit Visual Basic (1)

Frage von flyingmichael zum Thema Visual Studio ...

Batch & Shell
gelöst Dateiname entsprechend einem um x-Ebenen übergeordeten Ordnernamen umbenennen (3)

Frage von Booster07 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 ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...