45753
Goto Top

Mit For-Schleife ordner von z.b 01 bis 15 erstellen lassen

Hallo nochmal,

bastla meinte ich könnte mehrere Beiträge hintereinander erstellen... also tu ich das jetzt mal...

Ich habe das Problem, dass wenn ich ordner von z.b. 1 bis 15 mit der For-Schleife erstellen möchte kein 0 vor der 1 erzeugen kann. Es werden also Ordner 1, 2, 3, ... erstellt aber nicht 01, 02, 03, ... gibt es dafür eine Lösung?

FOR /L %%i in (1,1,15) do mkdir "%%i"
FOR /L %%i in (01,1,15) DO mkdir "%%i" <= erzeugt kein 0 vor der 1

Gruss,

wobleibtdiezeit

Content-Key: 56346

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

Printed on: May 4, 2024 at 23:05 o'clock

Member: Rockfire
Rockfire Apr 11, 2007 at 11:32:06 (UTC)
Goto Top
Probiermal:

for /L %i in (101,1,115) do set i=%i& set x=!i:~-2! &md !x!

Gruß

Andreas
Member: miniversum
miniversum Apr 11, 2007 at 11:37:29 (UTC)
Goto Top
So sollte es gehen:
setlocal enabledelayedexpansion
FOR /L %%i in (1,1,15) do set /a number=1000+%%i & mkdir !number:~-2,2!

miniversum

Edit: war woll mal wieder zu langsam
Member: Biber
Biber Apr 11, 2007 at 12:33:11 (UTC)
Goto Top
..eine weitere Variante ohne DelayedExpansion bzw. Zwischenvariable wäre so:
>for /L %i in (1,1,15) do @if %i LEQ 9 @( echo md 0%i) else @echo md %i
md 01
md 02
md 03
md 04
md 05
md 06
md 07
md 08
md 09
md 10
md 11
md 12
md 13
md 14
md 15
[Demo am Cmd-Prompt mit "ECHO md" statt "md"]

Gruss
Biber
Member: Biber
Biber Apr 13, 2007 at 23:17:53 (UTC)
Goto Top
Moin wobleibtdiezeit,
... gibt es dafür eine Lösung?
Na ja, es gab offensichtlich schon drei Lösungsansätze innerhalb der ersten 2 Stunden nach dem Stellen der Frage.

Das ist aber mittlerweile schon ein paar Tage her.
Hattest Du schon Gelegenheit, die Verwendbarkeit des einen oder anderen Schnipsels zu prüfen? Ergebnis?

Grüße
Biber
Mitglied: 45753
45753 Apr 15, 2007 at 12:54:50 (UTC)
Goto Top
Hallo Biber

Tschuldigung dass ich mich erst jetzt melde... mein zweiter Beitrag ist von mir auch noch unbeantwortet... Ich hatte einfach keine Zeit, sorry. Heute habe ich aber Zeit mich drum zu kümmern. Ich bin gerade dabei meine schon existierenden Variablen mit fixes (die leider wegen meiner falschen For-Schleife nicht funktionieren) mit Hilfe von euren Vorschlägen zu verbinden.
Ich habe nun alle drei Vorschläge ausprobiert und rausbekommen, dass miniversum's Lösung genau das ist, was mir noch fehlte. Allesdings verstehe ich die Syntax (noch) nicht ganz. Ohne

setlocal enabledelayedexpansion

würde miniversum's Vorschlag nicht funktionieren. Und nun Kopfschütteln - ich habe jetzt eine 145kb grosse Batch-Datei geschrieben, weis aber immer noch nicht was setlocal enabledelayedexpansion eigendlich macht ?!? Wenn ich ich dieses in meine bestehende Batch einfüge, könnte es dann möglich sein, dass einige Batchfunktionen dann nicht mehr funktionieren ?!?

Zu !number:~-2,2!
Ist das eine monäre Operation ? braucht man dafür setlocal enabledelayedexpansion ?
was genau macht die -2. Allgemein - ich hab keine Ahnung nach welchem Begriff ich im Web suchen muss um das hier verstehen zu können: :~-2,2

Auch wenn ich nicht weis wie es funktioniert ist es mir schon klar, dass wenn ich ordner von z.B. (1,1,111) anlegen möchte, ich :~-3,3 angeben muss... Da ich diese Werte schon in Variablen vorliegen habe, dürfte es nicht schwer sein dies umzusetzen.

Ich würde mich sehr freuen, wenn ihr mir in bezug auf meine Fragen weiterhelfen könntet.

Grüsse,
wobleibtdiezeit
Member: miniversum
miniversum Apr 15, 2007 at 15:21:29 (UTC)
Goto Top
setlocal enabledelayedexpansion
die Hilfe hierfür findest du wenn du im cmd "setlocal /?" eingibst. Es bewirkt das eine Variable die statt mit % vorne und hinten, mit ! gekennzeichnet ist verzögert aufgelöst wird.

FOR /L %%i in (1,1,15) do set /a number=1000+%%i & mkdir !number:~-2,2!
Der erste Teil:
FOR /L %%i in (1,1,15) do
Zählt einfach nur von 1 bis 15 in einer Schritten durch und schreibt den Wert jeweils in die Variable i
set /a number=1000+%%i
setzt die Variable number jeweils auf den wert 1000+i, also 1001,1002,1003 usw.
!number:~-2,2!
bedeutet, dass ab dem zweitlletzten Zeichen von hinten (-2) die nächsten zwei Zeichen (2) benutzt werden. Ein echo statt eines md würde dir also immer nur die beiden letzten Zeichen anzeigen, egal was in der Variabeln steht. Da also bei einstelligen Zahlen in der Variablen number dann nicht "1" sondern "1001" stehen würde, erhälst du als letzte zwei Zeichen die "01". Die Hilfe dazu kannst du genauer nachlesen wenn du am cmd "set /?" eigibst. Steht ungefär in der Mitte dann.

miniversum
Mitglied: 45753
45753 Apr 15, 2007 at 18:29:23 (UTC)
Goto Top
Hallo miniversum,

Danke für Dein Infos! Dein For-Schleife habe ich nun verstanden.
Hätte nicht gedacht, dass es die Hilfe cmd /? auch gibt.. ganau so wie setlocal /?
set /? hatte ich mir schon angesehen, nur anscheinend nicht richtig...

Edit:
Hab gerade bemerkt, dass einige Funktionien mit z.B. nircmd nicht mehr funktionierten. Deshalb hab ich
SETLOCAL ENABLEDELAYEDEXPANSION
und
SETLOCAL DISABLEDELAYEDEXPANSION
direkt vor und hinter die Zeile gesetzt, sodass der Rest der Batch-Datei davon ausgeschlossen wird.

Das Endergebnis sieht nun so aus - hatte sorge, dass das mit meinen vielen Variablen nicht hinhauen würde, aber es geht:

:ordnerpereingabe_format+fix__exec
SETLOCAL ENABLEDELAYEDEXPANSION
for /L %%i in (%ordnerpereingabe_startzahl%,%ordnerpereingabe_schritte%,%ordnerpereingabe_endzahl%) do set /a startzahlendzahlfix=%ordnerpereingabe_endzahl_suchen%+%%i & mkdir "%ordnerpereingabe_zeichenvor%!startzahlendzahlfix:~-%ordnerpereingabe_ziffern_zaehler%,%ordnerpereingabe_ziffern_zaehler%!%ordnerpereingabe_zeichennach%"  
SETLOCAL DISABLEDELAYEDEXPANSION
call :done
goto :start5

:ordnerpereingabe_format-fix__exec
for /L %%i in (%ordnerpereingabe_startzahl%,%ordnerpereingabe_schritte%,%ordnerpereingabe_endzahl%) do mkdir "%ordnerpereingabe_zeichenvor%%%i%ordnerpereingabe_zeichennach%"  
call :done
goto :start5



Ich wollte mich mal bei Euch
Biber, bastla, miniversum, hpdnm, usw. für euren Einsatz bedanken.
Ohne Euch Hilfe wäre ich mit meinr Batch-Programmierung nie so weit gekommen.
Auf viele Features wie auch dieses hier hätte meine Batch-Datei wahrscheinlich einfach verzichten müssen.
Fast immer wenn ich nach einer Problemlösung in sachen Batchprogrammierung google, komme ich hier in dieses Forum zu Euch Spezialisten. Und wenn ich mal in ein anderes Forum geleitet werde, dann stehen dort viele offene Fragen ohne Lösung bzw. Fragen mit falschen Antworten wie z.B. dass man in Batch-Dateien nicht rechnen könne. Ich hab den Eindruck dass das Web ohne dieses Forum hier und Euch um einiges ärmer wäre.

-=== Deshalb ein dickes Dankeschön an Euch ===-

Member: Biber
Biber Apr 15, 2007 at 22:38:17 (UTC)
Goto Top
Uppps. wobleibtdiezeit,

ich weiß nicht, wie es den anderen namentlich genannten jetzt geht, aber mich machst Du damit ganz verlegen...

Vielen Dank jedenfalls für die Blumen - und bei aller Bescheidenheit, es deckt sich durchaus mit meinem Eindruck, dass dieses Forum im Bereich "kleine spezialisierte Gebrauchsbatche und -skripte" durchaus einen Spitzenplatz einnimmt.

Schon allein die Quantität -vor ein paar Tagen hatte ich im Bereich "Batch & Shell" den 1000sten Beitrag und deshalb überlegt, ob ich da mal eine kleine Welle mache- schon allein diese Anzahl von über 1000 Batchfragen, bei denen an den meisten auch ein "Gelöst"-Haken dranhängt - das ist rekordverdächtig. Und die Qualität stimmt IMHO auch. *g

Wie dem auch sei, um die Quote zu halten, setze ich jetzt auch diese Frage auf "Gelöst" und "Geschlossen".
Und danke Dir nochmal im Namen aller für das Feedback.

Gruss
Biber