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 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, 9984 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 ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

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

Frage von cberndt zum Thema Batch & Shell ...

Hyper-V
gelöst Hyper-V gleiche Datenträger-ID bzw. Volume-ID (10)

Frage von Bernd16 zum Thema Hyper-V ...

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

Frage von onlyforu8373 zum Thema C und C ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...