leowatzn
Goto Top

BATCH: Fehler beim Schleifenzähler der FOR-Schleife

Hallo zusammen,
bei meinem Batch code soll folgendes passieren:

Abfrage Ordner anzahl & die maximale Anzahl der sich darin befindenden Dateien.
Alle Dateien aus allen Ordnern sollen mittels FOR von \User\Ordner\*1-x*\ nach \User\Test\ kopiert.

REM @ECHO OFF
CHCP 1252

SET /P e = "Anzahl der Ordner: "  
SET /P m = "Maximale Anzahl der Dateien pro Ordner: "  

FOR /L %%o IN (1,1,%%e) DO ( 
	FOR %%f IN (C:\User\Ordner\%%o\*.txt) DO COPY %%f C:\User\Test\
)
PAUSE
Hier stellt sich schon das erste Problem:
Die Dateien werden nicht kopiert. Wenn man die Ordner einzeln angibt sprich,
FOR %%f IN (C:\User\ordner\1\*.txt) DO COPY %%f C:\User\Test\
FOR %%f IN (C:\User\ordner\2\*.txt) DO COPY %%f C:\User\Test\
...
funktioniert es.


Nun zu Problem Nr. 2:
Hier soll in jede Datei (welche nun bereits in C:\User\Test\ liegen sollen) der Dateiname unter diesem Prinzip eingefügt werden
und der Inhalt der Datei ausgegeben werden.
FOR /L %%i IN (1,1,%%e) DO (
	FOR /L %%j IN (1,1,%%m) DO (
		FOR /F %%f IN (C:\User\Test\%%i.%%j.txt) DO (
			ECHO  %%i.%%j.txt >> C:\User\Test\%%i.%%j.txt
			ECHO %%f %%i %%j
		)
	)
)
PAUSE
Bei der Ausgabe sollte nun also: (bei 5 Ordnern mit jeweils 5 Dateien)
<inhalt> 1 1
<inhalt> 1 2
...
<inhalt> 1 5 
<inhalt> 2 1
...
<inhalt> 2 5
<inhalt> 3 1
...
<inhalt> 3 5
<inhalt> 4 1
...
<inhalt> 4 5
<inhalt> 5 1
...
<inhalt> 5 5


Die Ausgabe ist jedoch:

<inhalt> 1 1
<inhalt> 1 2
...
<inhalt> 1 5 //bis hier ist noch alles korrekt
<inhalt> 2 1
...
<inhalt> 2 4 //!!
<inhalt> 3 1
...
<inhalt> 3 4 //!!
<inhalt> 4 1
...
<inhalt> 4 4 //!!
<inhalt> 5 1
...
<inhalt> 5 4 //!!

Woran kann das liegen? (Betriebssystem: Windows 10 Enterprise, ausgabe in CMD)
LG leowatzn

Content-Key: 484530

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

Ausgedruckt am: 19.03.2024 um 05:03 Uhr

Mitglied: 140777
Lösung 140777 13.08.2019 aktualisiert um 11:36:04 Uhr
Goto Top
Da sind ja auch diverse Fehler in deinem Skript, angefangen an fehlerhaftem Zuweisen zu einer Variablen bis hin zu falschen Verwendung der nicht existenten Variablen.
@ECHO OFF &setlocal ENABLEDELAYEDEXPANSION
CHCP 1252

SET /P anzahl="Anzahl der Ordner: "  
SET /P max="Maximale Anzahl der Dateien pro Ordner: "  

FOR /L %%x IN (1,1,%anzahl%) DO (
  set cnt=1
  for %%a IN ("C:\User\Ordner\%%x\*.txt") DO (  
    if !cnt! LEQ %max% (
        COPY "%%a" "C:\User\Test\"  
        echo %%x-!cnt!.txt >>"C:\User\Test\%%~nxa"  
        type "C:\User\Test\%%~nxa"  
        set /a cnt+=1
    )
  )
)
Mitglied: leowatzn
leowatzn 13.08.2019 aktualisiert um 11:09:15 Uhr
Goto Top
Danke für deine Antwort.
Ich habe deinen Code getestet, jedoch tut sich nach
Zitat von @140777:
SET /P anzahl="Anzahl der Ordner: "  
SET /P max="Maximale Anzahl der Dateien pro Ordner: "  
nichts mehr. Auch bei deaktivierung von @echo off wird nichts angezeigt was auf den Fehler hinweist,
das Programm wird lediglich beendet.

Mit den Variablen kenne ich mich kaum aus, habe natürlich im Internet nachgeschlagen finde aber nichts Nützliches.

lg
Mitglied: 140777
140777 13.08.2019 aktualisiert um 11:18:43 Uhr
Goto Top
Nur ne Klammer beim Kopieren vergessen ist oben nachgetragen.
Mitglied: leowatzn
leowatzn 13.08.2019 um 11:30:41 Uhr
Goto Top
Danke für die Korrektur! - Läuft einwandfrei.

Weißt du evt. noch etwas zu Problem Nr.2 ?
FOR /L %%i IN (1,1,%%e) DO (
	FOR /L %%j IN (1,1,%%m) DO (
		FOR /F %%f IN (C:\User\Test\%%i.%%j.txt) DO (
			ECHO  %%i.%%j.txt >> C:\User\Test\%%i.%%j.txt
			ECHO %%f %%i %%j
		)
	)
)
PAUSE
Genaueres kannst du in der obigen Fragestellung nachlesen.
Mitglied: 140777
140777 13.08.2019 aktualisiert um 11:38:47 Uhr
Goto Top
s.o.

Bitte doch mal lesen
Tutorial zur FOR-Schleife
Mitglied: leowatzn
leowatzn 13.08.2019 aktualisiert um 11:52:28 Uhr
Goto Top
Selbes Problem wie im Original, nur dass nun die *.5-er Dateien (bis auf 1.5.txt) nicht mehr überhaupt nicht
angezeigt werden, sondern stattdessen folgendes angezeigt wird:

1 Datei(en) kopiert.
<inhalt>㈠㔮琮瑸ഠ
Mitglied: 140777
Lösung 140777 13.08.2019 aktualisiert um 12:39:06 Uhr
Goto Top
Dann haben deine Dateien UTF oder eine andere Kodierung wie Unicode & Co also entweder Codepage passend setzen oder besser gleich die Powershell nutzen wenn man mit solchen Dateien hantiert...
Mitglied: leowatzn
leowatzn 13.08.2019 um 13:27:56 Uhr
Goto Top
Dies ist tatsächlich der Fall.
Danke für deine Hilfe!

LG leowatzn