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
Kommentar vom Moderator Biber am 23.10.2009 um 10:41:16 Uhr
OT-Kommentare unterhalb des Kommentars bastla schreibt am 21.10.2009, 10:36:03 Uhr in Absprache mit bastla und chainsaw gelöscht.
GELÖST

Dateinamen auf gleiche länge bringen (Nullen auffüllen)

Frage Entwicklung Batch & Shell

Mitglied: chainsaw

chainsaw (Level 1) - Jetzt verbinden

19.10.2009, aktualisiert 23.10.2009, 10587 Aufrufe, 9 Kommentare

Hallo Gemeinde,

ich habe ein Verzeichnis, in dem liegen regelmäßig ca. 140 PDF-Dateien.

Die Daten liegen in folgendem Format vor:

1.pdf
2.pdf
...
13.pdf
67.pdf
...
103.pdf

Ich muß nun alle Namen auf gleiche Länge bringen, also bei den einstelligen zwei Nullen vorne anhängen
und bei den zweistelligen eine Null anhängen. Die dreistelligen sollen so bleiben.

das ist mein bisheriger Ansatz:

01.
@echo off & setlocal  
02.
 
03.
set "Dateien=D:\Daten" 
04.
set /p var=Name eingeben: 
05.
 
06.
for /f "delims=" %%i in ('dir /b "%Dateien%\*.PDF"') do call :Tuwas "%Dateien%\%%i"  
07.
goto :eof  
08.
 
09.
:Tuwas  
10.
set "Alt=%~n1"  
11.
set "T1=%Alt:~0,1%"  
12.
ren %1 "%var%00%T1%%~x1"  
13.
goto :eof 
14.
 
Der Schnipsel funktioniert - aber nur bei einstelligen PDF`s.
Hat jemand eine Idee wie man das lösen könnte?

Schönen Tag
chainsaw
Mitglied: chainsaw
19.10.2009 um 16:22 Uhr
Nochmal ich,

ich hab jetzt ne Lösung aber das ist wohl nicht die eleganteste:

Mit den Zeilen unten sortiere ich die einstelligen und zweistelligen Dateien aus und verschiebe sie jeweils in einen
eigenen Ordner. Dort kann ich dann auf dreistellige Namenskonvention umbenennen und move die Dateien dann
wieder zurück in den ursprünglichen Ordner.

01.
move %Dateien%\?.pdf %eins% 
02.
move %Dateien%\??.pdf %zwei%
Für die Profis hier sicherlich eine "billige" Lösung aber anders bekomm ich`s nicht hin.
Vielleicht fällt jemandem noch was eleganteres ein - ich will ja was dazulernen!

Gruß chainsaw
Bitte warten ..
Mitglied: Biber
19.10.2009 um 16:56 Uhr
Moin chainsaw,

dein Ansatz oben ist eher überzeugend als der jetzt gefundene Workaround

Bau lieber den ":tuWas"-Block oben um nach dieser Skizze:
01.
@echo off & setlocal  
02.
 
03.
set "Dateien=D:\Daten" 
04.
for /f "delims=" %%i in ('dir /b "%Dateien%\*.PDF"') do call :Tuwas "%Dateien%\%%i"  
05.
goto :eof  
06.
 
07.
:Tuwas  
08.
set "Neu=10000%~n1"  
09.
REM ---jetzt steht also bei Datei "23.pdf" der Wert "1000023" in %Neu% 
10.
@echo IF /i "%~n1" NEQ "%Neu:~-3,3%" REN "%~1" %Neu:~-3,3%%~x1 
11.
goto :eof
Vor dem REN steht im Moment noch ein @echo zum testen 8was ich auch nicht getan habe bisher)
Die Zeile
REN "%~1" %Neu:~-3,3%%~x1
sollte laut Plan aufgelöst werden zu ..neuer name = die letzten 3 Stellen der Variablen %Neu%
REN "alter PdfName incl Pfad" "nnn.pdf"

Grüße
Biber
Bitte warten ..
Mitglied: bastla
19.10.2009 um 16:57 Uhr
Sollte so gehen:
01.
@echo off & setlocal 
02.
set "Dateien=D:\Daten" 
03.
set "Typ=PDF" 
04.
set /p var=Name eingeben:  
05.
 
06.
pushd "%Dateien%" 
07.
for /f "delims=" %%i in ('dir /b *.%TYP%') do call :ProcessFile "%%i" 
08.
popd 
09.
goto :eof 
10.
 
11.
:ProcessFile 
12.
set "Alt=%~n1" 
13.
echo "123456789"|findstr /b "%Alt:~,1%" || goto :eof 
14.
set /a Nr=1000+Alt 
15.
ren %1 "%var%%Nr:~-3%%~x1" 
16.
goto :eof
Grüße
bastla

[Edit] Unterprogramm so geändert, dass nur mit einer Ziffer <> "0" beginnende Dateinamen verarbeitet werden [/Edit]

[Edit2] @Biber: Soviel zum Thema "Rechtsüberholer" ... [/Edit]
Bitte warten ..
Mitglied: chainsaw
20.10.2009 um 11:00 Uhr
@Biber und bastla,

Bin wieder mal schwer beeindruckt von euch - Danke euch beiden!

@Biber:
Funktioniert perfekt, wenngleichich trotz deiner Erklärung nicht ganz verstehe was genau passiert.

Mit set "Neu=10000%~n1" bringst du erst mal alle Dateien, egal ob ein, zwei oder drei Stellen auf achstellig, oder?
Hier >> @echo IF /i "%~n1" NEQ "%Neu:~-3,3%" REN "%~1" %Neu:~-3,3%%~x1 zerpflückst du das ganze dann wieder, oder?

Ist es unverschämt, wenn ich dich bitte, mir die Zeile näher zu erläutern? Ich möchte ja was lernen!


@baslta:
In deiner Variante scheint noch was nicht zu klappen

Schönen Gruß
chainsaw
Bitte warten ..
Mitglied: Biber
20.10.2009 um 13:18 Uhr
Moin chainsaw,

ich versuch mal zu erklären (auch wenn das nicht meine starke Seite ist).

Ich habe ja gestern (anders als bastla) die im Eröffnungsbeitrag gepostete Variante mit einem weiteren Präfix im Dateinamen ignoriert.
Dieses mit SET/P abgefragte %var%-Krams. Gehörte für mich eher nicht zum eigentlichen Problem.

Also blieb für mich die Aufgabe, dass (als Beispiel)
  • im ersten Durchgang die Dateien 1.pdf, 27.pdf und 144.pdf REINgehen in die Verarbeitung und als 001.pdf, 027.pdf und 144.pdf RAUSgehen sollen
  • in einem späteren Durchgung können dann die Dateien 2.pdf, 33.pdf vorliegen und immer noch die Dateien 001.pdf, 027.pdf und 144.pdf.

Wegen den Dateien mit führender "0" im Namen wolte ich auf ein SET /A ("Rechen"-Anweisung im Batch) verzichten, weil bei Zahlen dieser Art die CMD.exe immer mit mir diskutiert, ob ich denn Oktalwerte meine. Deshalb bin ich lieber auf String-Verkettung/kein Rechnen ausgewichen.

Schritt 1 war also das Bilden eines minimal 6stelligen, max 8stelligen Strings
Aus 1.pdf wird -->Neu=100001.pdf
Aus 27.pdf wird -->Neu=1000027.pdf
Aus 144.pdf wird -->Neu=10000144.pdf

im zweiten Schritt übernehme ich dann von diesem mindestens 6 Stellen langen String die letzten 3 Stellen
Aus 1.pdf wird -->Neu=100001.pdf"-->davon die letzten 3 Stellen --> %Neu:~-3,3%" ----> 001.pdf
Aus 27.pdf wird -->Neu=1000027.pdf"-->davon die letzten 3 Stellen --> %Neu:~-3,3%" ----> 027.pdf
Aus 144.pdf wird -->Neu=10000144.pdf"-->davon die letzten 3 Stellen --> %Neu:~-3,3%" ----> 144.pdf

[im zweiten Durchgang eventuell auch:
Aus 027.pdf wird -->Neu=1000027.pdf"-->davon die letzten 3 Stellen --> %Neu:~-3,3%" ----> 027.pdf ## hier Name vorher=Name nachher##
]


Sicherheitshalter noch die Prüfung, ob ich eventuell eine Datei in das umbenamsen will, was nun schon ihr Name ist.
@echo IF /i "%~n1" NEQ "%Neu:~-3,3%" ---> prüfe, ob "Dateiname-ohne-Endung-von-Parameter1" gleich dem Ergebnis "letzte 3 Stellen".

NICHT abgefangen habe ich jetzt, dass eventuell auch eine Datei 7.pdf angefasst wird, aber bereits eine Datei 007.pdf schon existiert.
Diese Kollision (falls bei deiner Anforderung denkbar) kannst du aber sicherlich noch mit einer "IF NOT EXIST-Erweiterung einbauen.

Grüße
Biber
Bitte warten ..
Mitglied: chainsaw
20.10.2009 um 14:39 Uhr
Hallo Biber,

Wow - super - langsam kommt Licht in mein Dunkel.
Vielen Dank, dass du dir so viel Arbeit gemacht hast. Sehr nett!

Ich setzte den Beitrag jetzt auf gelöst.

Schönen Tag noch
Gruß chainsaw
Bitte warten ..
Mitglied: bastla
20.10.2009 um 15:23 Uhr
Hallo chainsaw!

Nur der Ordnung halber (eine funktionierende Lösung hast Du ja schon): Wo liegt das Problem bei meinem Ansatz?

Grüße
bastla
Bitte warten ..
Mitglied: chainsaw
21.10.2009 um 10:24 Uhr
Hallo bastla,

Sorry hatte gestern keine Zeit mehr zum testen - jetzt funktioniert auch deine Variante.

Ich habe in Zeile 13

01.
echo "123456789"|findstr /b "%Alt:~,1%" || goto :eof 
die Doppelpipes duch && ersetzt

01.
echo "123456789"|findstr /b "%Alt:~,1%" && goto :eof 
- jetzt geht`s.

Du hast ja einen ähnlichen Ansatz hast wie Biber - erst hängst du Nullen an, und dann nimmst du
die letzten drei Stellen des Dateinamens weg, oder?
Ich kapiers ja ehrlich gesagt nur scheibchenweise, aber was bewirkt >echo "123456789" < genau?

Schöne Grüße
chainsaw
Bitte warten ..
Mitglied: bastla
21.10.2009 um 10:36 Uhr
Hallo chainsaw!
was bewirkt >echo "123456789" < genau?
Damit wird dem folgenden "findstr" etwas zum Durchsuchen geliefert - konkret geht es darum,dass das erste Zeichen von %Alt% eine Ziffer (ausschließlich 0) sein soll und daher in "123456789" gefunden werden muss -allerdings hatte ich leider ein "/b" dabei, womit immer nur mit "1" verglichen wurde ...

Richtig müsste die Zeile daher lauten:
echo "123456789"|findstr "%Alt:~,1%" || goto :eof 
Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Zeilen in TXT mit Leerzeichen auf eine bestimmte Länge auffüllen
gelöst Frage von stingray14kBatch & Shell4 Kommentare

Hallo zusammen, ich habe schon nach einer passenden Lösung gesucht, aber leider nicht die richtigen Befehle gefunden. Meine Text ...

Batch & Shell
Finden von (fast) gleichen Dateinamen, Ändern von Dateinamen
gelöst Frage von internet2107Batch & Shell8 Kommentare

Ich habe leider mal wieder eine etwas knifflige Sache. Aktuell suche ich in Verzeichnissen nach Dateien mit gleichen Namen ...

Windows 7
Dateinamen von bildern auslesen und ab der 6. Stelle die Nulle entfernen
Frage von ChimseeWindows 75 Kommentare

Hallo Liebe Gemeinde ich habe einige bilder mit den Bezeichnungen 01-01-01 bis 01-11-099, die null ab der 6. Stelle ...

DNS
DNS in AD - .domäne.int automatisch auffüllen?
gelöst Frage von Fr4nkiDNS3 Kommentare

Hallo Zusammen, in unserem AD gibt es ein merkwürdiges Phänomen. Wir nehmen jetzt einfach mal an, dass wir die ...

Neue Wissensbeiträge
Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 7 StundenWindows 101 Kommentar

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 8 StundenSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 1 TagViren und Trojaner2 Kommentare

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 1 TagRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...

Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Netzwerkgrundlagen
Hi eine blöde frage. xD
Frage von 132954Netzwerkgrundlagen12 Kommentare

Also: Habe 2012 r2 essentials neuinstalliert, allerdings installiert diese version ja gleich diesen gangen AD kram mit, den hab ...