linovanbino
Goto Top

Wie Ordner und fortlaufend nummerierte Unterordner aus Text mit Batch erstellen?

Hallo Zusammen,

leider bin ich kein Script Fachmann, aber muss mich hier einer Aufgabe stellen.
Ich muss/will mit einer Batch (.bat) Datei aus einer Text (.txt) Datei viele viele Ordner mit fortlaufenden Unterordnern erstellen.

Das ganze soll dann folgendermaßen aussehen.

Text:

zBsp:
1. Name/Zeile aus Text Anna Anreim
2. Name/Zeile aus Text Betti Bruns
3. Name/Zeile aus Text Conny Clon

Ordner: Jeweils ein Namensordner mit 50 Unterordner mit Namen und Nummerierung.

Anna Anreim\Anna Anreim 01
bis
Anna Anreim\Anna Anreim 50

Betti Bruns\Betti Bruns 01
bis
Betti Bruns\Betti Bruns 50

Conny Clon\Conny Clon 01
bis
Conny Clon\Conny Clon 50

Die Ordnernamen sollen aber schon mit Leerzeichen (Anna Anreim 01)
und nicht mit Unterstricht (Anna_Anreim_01) benannt sein.

Ich habe bereits eine Befehlszeile gefunden die mir meine Ordner mit Namen erstellt.


Diese liest mir aus meiner ordnername.txt auch meine Namen aus und erstellt mir die Ordner.
Meiner Ansicht nach funktioniert das leider nur mit Unterstrich, aber nicht mit Leerzeichen.

for /f "tokens=1" %%a in (ordnername.txt) do mkdir %%a

und auch eine Methode die mir im gleichen Ordner fortlaufend durchnummerierte Ordner erstellt,
aber eben nicht in den Ordnern, die aus der Textdatei erstellt wurden, aber dafür funktioniert
es so auch mit Leerzeichen.

@echo OFF
SET N=1
:SCHLEIFE
IF %N%==51 GOTO ENDE
MD "Anne Anreim "%N%
SET /A N=%N%+1
GOTO SCHLEIFE
:ENDE
@echo ON
EXIT

bzw. auch diese hier

for /l %%i in (1,1,50) do mkdir "Anna Anreim "%%i

Die Namen für die Unterordner sollen aber auch alle aus dem Text übernommen
und nicht per Hand eingeschrieben werden.

Habt Ihr hier evtl. eine Lösung oder Ansatz für mich.
Schönen Dank im Voraus.

Lino

Content-Key: 267140

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

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

Member: bastla
Solution bastla Mar 22, 2015, updated at Apr 30, 2015 at 09:46:13 (UTC)
Goto Top
Hallo LinoVanBino und willkommen im Forum!

Könnte etwa so gehen:
@echo off & setlocal
set "Liste=D:\ordnername.txt"  
set "Ziel=D:\Test"  

for /f "usebackq delims=" %%i in ("%Liste%") do (  
    for /L %%a in (101,1,150) do (
        set "Nr=%%a"  
        setlocal enabledelayedexpansion
        md "%Ziel%\%%i\%%i !Nr:~-2!"  
        endlocal
    )
)
Die Zählschleife von 101 bis 150 dient der Erzeugung von zweistelligen Nummern mit führender Null - wenn diese nicht benötigt würde, ließen sich die Zeilen 5 bis 12 auf
for /f "usebackq delims=" %%i in ("%Liste%") do for /L %%a in (1,1,50) do md "%Ziel%\%%i\%%i %%a"
reduzieren ...

Grüße
bastla
Member: LinoVanBino
LinoVanBino Mar 22, 2015 at 20:26:09 (UTC)
Goto Top
Erst einmal vielen Dank für die schnelle Antwort. Ich bin ein absoluter Laie und darum muss ich auch oft nachfragen um das ganze richtig zu verstehen. Also nicht falsch verstehen.

Liege ich richtig mit der Annahme, dass set "Liste=D:\ordnername.txt" der Pfad der Ausgangsdatei
und set "Ziel=D:\Test" der Pfad der Zieldatei ist?

Ich brauche nämlich ein Script, bei dem das Ausgangs- und Zielverzeichnis das gleiche wie das der Batchdatei ist und nicht das man immer erst ein andere bestimmte Verzeichnisse eingeben muss.
Member: bastla
Solution bastla Mar 22, 2015, updated at Apr 30, 2015 at 09:46:09 (UTC)
Goto Top
Hallo LinoVanBino!

Dann eben so:
set "Liste=ordnername.txt"  
set "Ziel=."  
oder lass "%Ziel%\" in der "md"-Zeile einfach weg ...

Grüße
bastla
Member: LinoVanBino
LinoVanBino Mar 23, 2015 at 00:12:07 (UTC)
Goto Top
Dankeschön! Das klappt sehr gut. Mir ist nur aufgefallen, dass das Script nicht funktioniert, wenn in dem Text Umlaute enthalten sind. Ich muss jetzt aber doch erstmal eine andere Lösung finden und alles in den Batch schreiben, weil die Namen alle eine unterschiedliche Anzahl an Unterordnern haben und ich das so mit einer Textdatei nicht genau zuordnen kann und alles zu unübersichtlich wird.

Ich habe jetzt folgendes was funktioniert, aber da kann man bestimmt noch was kürzen, verbessern und zurecht feilen. zBsp. wie man die Zahlen 01-09 oder 001-099 noch anders hin bekommt.

Ordner Anna Anreim im Verzeichnis der Batchdatei mit den Unterordnern Anna Anreim 01 bis 20

und Ordner Betti Bruns im Verzeichnis der Batchdatei mit den Unterordnern Betti Bruns 01 bis 30

for /l %%i in (1,1,9) do md "Anna Anreim/Anna Anreim 0"%%i
for /l %%i in (10,1,20) do md "Anna Anreim/Anna Anreim "%%i

for /l %%i in (1,1,9) do md "Betti Bruns/Betti Bruns 0"%%i
for /l %%i in (10,1,30) do md "Betti Bruns/Betti Bruns "%%i

Da kommen bestimmt noch andere Unterordner hinzu, die man später noch hinzufügen lassen kann. Ich bin aber schon mal froh, dass ich soweit bin und mir einiges an Arbeit und Zeit spare, die sich bei einer großen Masse an Dateien anhäuft.
Member: Endoro
Solution Endoro Mar 23, 2015, updated at Apr 30, 2015 at 09:45:59 (UTC)
Goto Top
Hey, du kannst die Anzahl der Unterordner auch in den Text schreiben, mit einem Doppelpunkt vom Namen getrennt:
Anna Anreim:20
Betti Bruns:30
Conny Clon:20

Dann bastlas Code leicht abgewandelt:
@echo off & setlocal
set "Liste=ordnername.txt"  
set "Ziel=."  

for /f "usebackq tokens=1,2 delims=:" %%i in ("%Liste%") do (  
    for /L %%a in (1,1,%%j) do (
        set "Nr=0%%a"  
        setlocal enabledelayedexpansion
        md "%Ziel%\%%i\%%i !Nr:~-2!"  
        endlocal
    )
)
Gruß, Endoro

PS: bei manchen for-Schleifen können Schleifenparameter im Codeblock variabel sein.
Member: bastla
Solution bastla Mar 23, 2015, updated at Apr 30, 2015 at 09:45:54 (UTC)
Goto Top
@ Endoro
Danke für's Aushelfen face-smile - wäre in etwa auch mein Ansatz gewesen.

Noch als Ergänzung hinsichtlich der Umlaute: Ein
chcp 1252 >nul
vorweg könnte helfen ...

Grüße
bastla
Member: FloJoCNC
Solution FloJoCNC Apr 03, 2015, updated at Apr 30, 2015 at 09:45:48 (UTC)
Goto Top
Hallo,
Hab was Leichtes Gemacht das ließt es halt nicht aus einer TXT aus
@echo off
 title Ordner Ersteller by Florian
 
:Start
cls
echo.
echo Pfad der zu erstellenden Ordner eingeben:
set /p pfad=
:Name
cls
echo.
echo Name der Ordner eingeben z.B. Anja
echo Erstellt wird Anja 1, Anja 2 usw.
set /p name=
:Anzahl
cls
echo.
echo Wie viele Ordner?:
set /p anz=

:MAKE
cls
set /a X=%X%+1
md %pfad%\%name%.%X%
if %X% == %anz% goto check
goto MAKE

:check
cls
if not exist %pfad%\%name%.1 goto fail
if not exist %pfad%\%name%.%X% goto fail 1
echo.
echo Ordner erolgreich Erstellt
pause>nul
exit

:fail
cls
echo.
echo Ordner konnten nicht erstellt werden.
pause>nul
goto Start
:fail1
cls
echo.
echo Wohlmoglich nicht alle Ordner Erstellt
pause>nul
goto Start

SRY ist halt mi einem Punkt mit einem Leerzeichen geht das meinen Ertrachten nicht.
Hoffe das Hilft
Florian
Member: bastla
Solution bastla Apr 03, 2015, updated at Apr 30, 2015 at 09:45:43 (UTC)
Goto Top
Hallo FloJoCNC und willkommen im Forum!

Warum sollte das mit Leerzeichen nicht gehen? Ändere die Zeile 24 auf
md "%pfad%\%name% %X%"
BTW: Zum Hochzählen wäre
set/a X+=1
eleganter (und würde auch innerhalb einer for-Schleife funktionieren) ...

Grüße
bastla
Member: FloJoCNC
FloJoCNC Apr 03, 2015 at 10:57:07 (UTC)
Goto Top
Danke und Hallo,
Ich möchte mich bedanken für die Erweiterung meines Wissens,