45753
Goto Top

Reihenfolge von Zahlen korrekt anzeigen lassen ohne vorangestellter 0

Hallo zusammen,

gibt es eine Moeglichkeit in der Shell sich die Reihenfolge von Zahlen korrekt anzeigen lassen ohne vorangestellter 0 ?

Zahlenfolge 1-12 = 1,10,11,12,2,3,4,5,6,7,8,9

sollte aber sein

Zahlenfolge 1-12 = 1,2,3,4,5,6,7,8,9,10,11,12

Gruesse, wobleibtdiezeit

Content-Key: 64310

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

Printed on: April 25, 2024 at 04:04 o'clock

Member: bastla
bastla Jul 20, 2007 at 11:16:19 (UTC)
Goto Top
Hallo wobleibtdiezeit!

Du solltst vielleicht dazusagen, wo die Zahlen herkommen bzw was Du damit vorhast ...

Ganz grundsätzlich: Wenn Du eine Zahl einer Variablen mit
set /a Var=Zahl
zuweist, wird diese numerisch interpretiert ...

Grüße
bastla
Mitglied: 45753
45753 Jul 20, 2007 at 11:35:35 (UTC)
Goto Top
Hallo bastla!

[ Du solltst vielleicht dazusagen, wo die Zahlen herkommen... ]

Stimmt hab ich vergessen...

Die Zahlen stammen aus Dateinamen.

Das Problem:

Wenn ich eine schon vorhandenen Zaehlenfolge aus den Ursprungsdateien entfernen moechte um dann gleich einen neuen Zaehler einzubauen geht das mit meiner Batch nicht innerhalb einer Operation. Ich muss immer zuerst die vorangestellten 0en berechnen lassen, damit mir die Reihenfolge im zweiten Durchgang dann korrekt angezeigt wird. Im zweiten Durchgang haben die Dateien dann nicht mehr die Zahlenfolge 1-12 sondern 01-12 - also 01,02,03,04,05,06,07,08,09,10,11,12. Erst dann wird die Reihenfolge der Dateien in der Shell korrekt angezeigt.
Wenn ich das nicht taete, dann wuerde der neue Zaehler die Datei mit der Zahl z.B. 10 an die zweite Stelle setzen - auf Grund der Darstellung der Ursprungsreihenfolge ohne vorangestellter 0: 1,10,11,...

Gruesse, wobleibtdiezeit

p.s. In Windows 98/95 gab es im Windows Explorer das gleiche Problem. Erst mit Windows XP/98 wurde dieses Problem im Explorer behoben. Die Shell scheint vergessen worden zu sein. Oder ist das Absicht ?
Member: bastla
bastla Jul 20, 2007 at 12:06:53 (UTC)
Goto Top
Hallo wobleibtdiezeit!

Wenn Du Nummern in Dateinamen konsequent mit führender Null verwendest, taucht das Problem gar nicht auf.

Ausgehend von einem Dateinamen "Test0816.txt", gespeichert in der Variable %1, könntest Du die nächste Nummer etwa so ermitteln:
set "DateiName=%~n1"  
set /a Nr=1%DateiName:~-4%+1
set NeueNr=%Nr:~-4%
echo %NeueNr%
Falls der Name in %%i steht, in der ersten Zeile eben %%~ni verwenden

Die Zahl 4 gibt die Stellenanzahl an.


Grüße
bastla
Mitglied: 45753
45753 Jul 20, 2007 at 12:34:45 (UTC)
Goto Top
Hallo bastla!

Danke fuer die Hilfe...

Diese Art Code ist in meiner Batch auch enthalten. Sie ist auch in der Lage Ziffern zu erkennen um so die Ziffernanzahl der jeweiligen Zahl zu ermitteln um dann die ganza Zahl zu loeschen bzw. zu bearbeiten - unabhaengig davon an welcher Stelle die Zahl im Dateinamen steht...
Ich selbst nutze auch immer konzequent die Zahlen mit vorangestellter 0. Die Batch ist fuer Renaming-Zwecke gedacht. Dabei kommen die nicht von mir stammende Dateien mit nicht vorangestellter 0 leider immer wieder mal vor. Und genau das ist mein Problem...

Es gibt sicherlich andere Renaming-Tool die das ohne Probleme beherschen. Es wuerde mich aber doch interessieren, ob die Batch ebenso dazu in der Lage ist.

Gruesse, wobleibtdiezeit
Mitglied: 45753
45753 Jul 20, 2007 at 20:27:24 (UTC)
Goto Top
Nabend,

Da diese Art der Anzeige anscheinend auch weder in der Bash noch in der Powershell moeglich ist, muss es einen Grund dafuer geben weshalb diese Ausgabe nicht umzusetzen bzw. gewuenscht ist.
Alternative dir-Tools die ich ergoogelt habe schaffen es auch nicht.

Hat jemand eine Erklaerung warum in allen Shells die Zahlen 1-12 in den Dateinamen in der Reihenfolge
1,10,11,12,2,3,4,5,6,7,8,9
und nicht in der Reihenfolge
1,2,3,4,5,6,7,8,9,10,11,12
wie im Windows Explorer ausgegeben werden ?

Gruesse, wobleibtdiezeit
Member: bastla
bastla Jul 20, 2007 at 21:17:24 (UTC)
Goto Top
Hallo wobleibtdiezeit!

Weil einfach nach ASCII sortiert und dabei der Dateiname nicht "interpretiert" wird? Für die CMD-Shell ist eben der Name ein String und nicht ein String mit Integer hintendran.

Grüße
bastla
Member: Biber
Biber Jul 21, 2007 at 00:50:08 (UTC)
Goto Top
Moin wobleibtdiezeit,

der Explorer kennt beide Einstellungen - die stumpf-alphabetische Sortierung und alternativ auch die "Zahlen-im-Dateinamen-nach-Wert"-Sortierung.
Lässt sich über einen Registry-Wert umschießen/einstellen. Ist auch irgendwo in diesem Forum schon mal gepostet worden.

Aber, um noch mal die von bastla schon gehauene Kerbe zu vertiefen - eigentlich vergibt man/frau geplanterweise so, dass sie später "sortiert" erscheinen, also nach Datum-im-Namen (z.B. "JJJJ-MM-TT_Protokoll.doc") oder mit "Version-im-Namen" ( und dann meinetwegen mit 1001 beginnend).

Grüße
Biber
Mitglied: 45753
45753 Jul 21, 2007 at 09:10:42 (UTC)
Goto Top
Hallo zusammen,

Danke Biber, dass du dich auch zu Wort meldest. Da sich der Registry-Wert wohl nur auf den Explorer bezieht und fuer die CMD-Shell wie bastla schreibt der Name nur ein String und nicht ein String mit Integer hintendran ist, werde ich die Sucherei im Web besser einstellen.

Danke fuer die Infos, wobleibtdiezeit
Mitglied: 45753
45753 Jul 21, 2007 at 23:59:10 (UTC)
Goto Top
Nabend!

Es gibt doch eine Loesung/Teil-Loesung des Problems.

Da es mir egal sein kann an welcher Stelle im Dateinamen sich der Zaehler befindet, kann ich ab der Stelle x im Dateinamen prüfen lassen, ob das 2., 3., 4., usw, Zeichen eine Zahl ist. Alle Dateinamen in denen sich die Zahlen mit nur einer Ziffer befinden werden dann in die Datei bla01.txt und die Dateinamen mit zweistelliger Ziffernanzahl in die Datei bla02.txt usw, geschrieben. Danach kann man (ist nicht zwingend notwendig) die Dateien zu einer zusammenfuegen. In der Datei blaall.txt werden zuerst die Dateinamen aus der bla01.txt umgeleitet, dann aus der bla02.txt usw. So hat man nun die korrekte Reihenfolge der Dateien auch ohne vorheriger 0 Stellenberechnung und ohne die Dateien zuerst umbenennen zu muessen. Diese Operation einzusparen war ja wie schon oben erwähnt mein eigentliches Ziel. Statt dem Dir-Befehl in der For-Schleife kann ich nun alternativ die blaall.txt einlesen lassen.

Der Rechenaufwand im Vergleich zum einfachen Dir-Befehl wird hoffendlich nicht allzu gross ausfallen. Den Code muss ich noch einfuegen. Aber das wird nicht schwer werden.

Nacht, wobleibtdiezeit