WinFuture-Forum.de: FOR-Schleife funktioniert nicht - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

FOR-Schleife funktioniert nicht


#1 Mitglied ist offline   stRavin 

  • Gruppe: Mitglieder
  • Beiträge: 7
  • Beigetreten: 05. Mai 22
  • Reputation: 0

geschrieben 05. Mai 2022 - 11:23

Hallo Zusammen ich hoffe ihr könnt mir helfen,

ich bin am verzweifeln.....
ich versuche gerade einen Backup-Job zu schreiben.
Bevor das Backup über Robocopy startet, sollen alle angeschlossenen Laufwerke auf eine bestimmte Datei durchsucht werden. damit das Backup immer auf das richtige Laufwerk geschrieben wird (Wechseldatenträger).

Um das zu prüfen, schreibe ich zuerst über wmic logicaldisk get deviceid die DeviceID´s in eine Textdatei.
über eine FOR-Schleife wollte ich dann die einzelnen ID´s in ein Array schreiben um diese dann über eine weitere Schleife zu prüfen.

jetzt habe ich das Problem das die FOR-Schleife die Zeilen aus der Textdatei nicht ausliest. Ich finde den Fehler aber nicht.


Code sieht so aus (echo um zu sehen was er ausliest..):

for /F "tokens=* skip=1" %%i in (C:\Users\Public\Desktop\einlesen.txt) do echo %%i


Txt sieht so aus

DeviceID
C:
E:
F:
H:
I:
J:
K:
R:
U:

Vielen Dank
Gruß
0

Anzeige



#2 Mitglied ist offline   DK2000 

  • Gruppe: Administration
  • Beiträge: 19.794
  • Beigetreten: 19. August 04
  • Reputation: 1.434
  • Geschlecht:Männlich
  • Wohnort:Oben auf dem Berg
  • Interessen:Essen, PC, Filme, TV Serien...

geschrieben 05. Mai 2022 - 12:22

Kommt da ein Fehler? (ggf echo wieder einschalten). Bei mir klappt das soweit. Die Ausgabe der Schleife:


D:\temp>test.cmd
C:
E:
F:
H:
I:
J:
K:
R:
U:

D:\temp>

Ich bin kein Toilettenpapier-Hamster.
---
Ich bin ein kleiner, schnickeldischnuckeliger Tiger aus dem Schwarzwald.
Alle haben mich ganz dolle lila lieb.
0

#3 Mitglied ist offline   stRavin 

  • Gruppe: Mitglieder
  • Beiträge: 7
  • Beigetreten: 05. Mai 22
  • Reputation: 0

geschrieben 05. Mai 2022 - 12:29

Danke für die schnelle Antwort.
Es kommt keine Fehlermeldung es wird nur folgendes ausgespuckt:

C:\Users\Public\Desktop>pause
Drücken Sie eine beliebige Taste . . .

C:\Users\Public\Desktop>for /F "tokens=* skip=1" %i in (einlesen.txt) do echo %i

C:\Users\Public\Desktop>pause
Drücken Sie eine beliebige Taste . . .

Gruß
Kevin
0

#4 Mitglied ist offline   DK2000 

  • Gruppe: Administration
  • Beiträge: 19.794
  • Beigetreten: 19. August 04
  • Reputation: 1.434
  • Geschlecht:Männlich
  • Wohnort:Oben auf dem Berg
  • Interessen:Essen, PC, Filme, TV Serien...

geschrieben 05. Mai 2022 - 12:44

Bei mir läuft s einwandfrei. Sehe da so keinen Fehler. Die Schleife funktioniert soweit. Mh?
Ich bin kein Toilettenpapier-Hamster.
---
Ich bin ein kleiner, schnickeldischnuckeliger Tiger aus dem Schwarzwald.
Alle haben mich ganz dolle lila lieb.
0

#5 Mitglied ist offline   stRavin 

  • Gruppe: Mitglieder
  • Beiträge: 7
  • Beigetreten: 05. Mai 22
  • Reputation: 0

geschrieben 05. Mai 2022 - 13:16

hmm ok das verstehe ich nicht..... dann muss doch bei dir doch irgendwas anders sein..
0

#6 Mitglied ist offline   DK2000 

  • Gruppe: Administration
  • Beiträge: 19.794
  • Beigetreten: 19. August 04
  • Reputation: 1.434
  • Geschlecht:Männlich
  • Wohnort:Oben auf dem Berg
  • Interessen:Essen, PC, Filme, TV Serien...

geschrieben 05. Mai 2022 - 14:15

Nur was? Habe da zum Testen eine einlesen.txt und eine test.cmd mit dem Inhalt angelegt:

@echo off
for /F "tokens=* skip=1" %%i in (einlesen.txt) do echo %%i


Und das klappt soweit. Es wird der Inhalt der .txt zeilenweise ausgegeben (bis auf Zeile 1).
Ich bin kein Toilettenpapier-Hamster.
---
Ich bin ein kleiner, schnickeldischnuckeliger Tiger aus dem Schwarzwald.
Alle haben mich ganz dolle lila lieb.
0

#7 Mitglied ist offline   stRavin 

  • Gruppe: Mitglieder
  • Beiträge: 7
  • Beigetreten: 05. Mai 22
  • Reputation: 0

geschrieben 06. Mai 2022 - 06:01

Guten Morgen :-)

es scheint an der TXT zu liegen, wenn ich die TXT selber schreibe führt er die Schleife aus. Wenn ich die TXT aber über wmic logicaldisk get deviceid erstelle geht es nicht.

Ich sehe so auch bei den Dateien keinen direkten unterschied.... außer das er bei der aus cmd erstellten Leerzeichen einfügt welche aber ja durch "tokens=*" ignoriert werden sollten. Aber selbst wenn ich die Weg mache geht es nicht.....

hast du eine Idee?
Gruß

Kevin
0

#8 Mitglied ist offline   stRavin 

  • Gruppe: Mitglieder
  • Beiträge: 7
  • Beigetreten: 05. Mai 22
  • Reputation: 0

geschrieben 06. Mai 2022 - 11:13

Ich hab es jetzt anders gelöst, ich lese die DeviceID´s gar nicht aus. Ich Frage einfach alle 26 Buchstaben auf Existenz ab, das funktioniert auch wunderbar.

jetzt habe ich aber das nächste Problem..... ich möchte das die Existierenden DeviceID´s in ein Array geschrieben werden.
versucht habe ich es so:

REM Ausgabe der existierenden DeviceID´s

ECHO OFF 

FOR %%i IN (\'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\') DO IF EXIST %%i:\\\\ echo Laufwerk %%i:\\\\ existiert.
PAUSE
EXIT


set n=0

REM Existierende DeviceID´s in Array übergeben

FOR %%i IN (\'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\') DO (

	IF EXIST %%i:\\\\ (
		set LaufArr[!n!] = %%i 
		set /A n+=1	
)) 

REM Kontrolle ob Anzahl stimmt

echo %n%

pause

REM Array ausgeben

FOR %%a IN (%LaufArr%) do (
	echo %%a
)

PAUSE
EXIT


Er schreibt aber nichts in das Array glaube ich jedenfalls da er nichts ausgibt auch nicht wenn ich einen einzelnen Array Eintrag z.B. [0] ausgeben will. Was mache ich falsch?
Gruß
Kevin
0

#9 Mitglied ist offline   DK2000 

  • Gruppe: Administration
  • Beiträge: 19.794
  • Beigetreten: 19. August 04
  • Reputation: 1.434
  • Geschlecht:Männlich
  • Wohnort:Oben auf dem Berg
  • Interessen:Essen, PC, Filme, TV Serien...

geschrieben 06. Mai 2022 - 13:02

So sollte es laufen:

@echo off

setlocal EnableDelayedExpansion

set /a n=0

for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
   if exist %%i:\ (
   set LaufArr[!n!]=%%i
   set /A n+=1
   )
)

echo.
echo %n% Elemete im Array
echo.

set /a n-=1

for /l %%i in (0,1,!n!) do ( 
   echo !LaufArr[%%i]!
)

echo.
pause
exit


Und das er Deine Textdatei nicht einlesen konnte, liegt an der Kodierung. Die muss UTF-8 sein. Die Konsole erstellt aber eine Datei mit UTF-16 LE BOM. Das kann die cmd nicht einlesen.
Ich bin kein Toilettenpapier-Hamster.
---
Ich bin ein kleiner, schnickeldischnuckeliger Tiger aus dem Schwarzwald.
Alle haben mich ganz dolle lila lieb.
0

#10 Mitglied ist offline   stRavin 

  • Gruppe: Mitglieder
  • Beiträge: 7
  • Beigetreten: 05. Mai 22
  • Reputation: 0

geschrieben 06. Mai 2022 - 13:40

Es funktioniert! Super vielen Dank!!
0

#11 Mitglied ist offline   CaNNoN 

  • Gruppe: aktive Mitglieder
  • Beiträge: 484
  • Beigetreten: 16. November 05
  • Reputation: 78

geschrieben 06. Mai 2022 - 22:51

Beitrag anzeigenZitat (stRavin: 06. Mai 2022 - 06:01)

Guten Morgen :-)

es scheint an der TXT zu liegen, wenn ich die TXT selber schreibe führt er die Schleife aus. Wenn ich die TXT aber über wmic logicaldisk get deviceid erstelle geht es nicht.


wie DK schon schrieb liefert wmic die 'falsche' codierung, um das zu umgehen muesstest du den output pipen, z.b. so:

wmic logicaldisk get deviceid | find /v "" > output.txt

0

#12 Mitglied ist offline   stRavin 

  • Gruppe: Mitglieder
  • Beiträge: 7
  • Beigetreten: 05. Mai 22
  • Reputation: 0

geschrieben 16. Mai 2022 - 11:07

Hallo Zusammen,

nochmal Danke für die ganzen Antworten.
Ich habe wieder eine Frage...

Das Script schreibt mir jetzt die vorhandenen Laufwerke in ein Array und gibt mir diese aus, das funktioniert einwandfrei vielen Dank dafür!

jetzt möchte ich das er die vorhandenen Laufwerke aus dem Array auf eine Datei "Token.txt" überprüft und wenn die Datei vorhanden ist via Robocopy das Backup dort ausführt.

ich habe es wie folgt versucht:

for %%r in (LaufArr[!n!]) do (
	if Exist %%r:\Token.txt (
		set Path=%%r
	else
		goto Fehler
	)
)


leider ohne Erfolg. (Es wird einfach nur übersprungen bzw. wird einfach der Code ausgegeben)

Ich muss Zugeben das ich nicht viel Erfahrung mit Scripten habe und so meine Probleme damit habe..... Ich Programmiere normalerweise in VBA, Python oder C#.

könnt ihr mir nochmal helfen?

Gruß
Kevin

PS.:
Ich versuch den Laufwerkbuchstaben des Laufwerkes auf welchem sich die Datei in eine Variable zu Speichern um das Später mehrfach verwenden zu können.

Gruß
Kevin
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0