wannabeapro
Goto Top

Zeilen wechsel in einer .txt datei

Hallo Jungs

face-smile

Nachdem ich nun alles hinbekommen hab face-smile
Wartet nun das letzte und wohl größte Problem
Ich möchte nun innerhalb des Text Dokuments die Zeile wechseln die Ausgelesen werrden soll.
Dazu hab ich zwar einiges im Netz gefunden. Dort wird aber nichts näheres erklärt und so versteh ich die Befehl anfolge nicht so ganz face-sad

Währe nett wenn ihr mir den befehl und vllt ein kleines Bsp geben könntet mit einer erklärung.

So kleines Edit vorm Feierabend damit morgen früh vllt etwas Brauchbares dabei ist face-smile

Und zwar habe ich eine Text datei in der Pfade stehen. Im bsp:

Quelle Ziel
Quelle Ziel
...

Nun soll er bei jedem Schleifen Ablauf Die Quelle in die Variable "Quelle" schreiben und Ziel in die Variable " Ziel"
Das macht er auch soweit, halt nur für die erste Zeile.
Beim nägsten Durchlauf hät ich dann gerne die Zweite Zeile zum einlesen und dann die Dritte...
Wie kann ich das Realisieren?

Sorry wenn die Frage vllt etwas blöd Klingt aber ich habe mit Batch erst seit 2 Tage zutun. Bin somit ein Absoluter Anfänger ^^

Hoffe die Batch Experten haben ne Lösung Parat face-confused

Als kleiner ansporn vllt das Ende variable gestallten? Das das Programm vorher Die Zeilen durch Zählt und diese Zahl dann als ende Definiert.

Ist im moment leider auch zuhoch für mich face-confused

Also ich hoffe auf eure Hilfe


@FOR /F "eol=; tokens=1,2* usebackq delims=, " %%i in ("liste.txt") do @(   
   	@set Quelle=%%i 
   	@set Ziel=%%j
	pause
	@echo %Quelle%
	@echo %Ziel%
	pause
	echo %tok%


	
	if "%tok%" == "19" goto :ende )  


Danke schon einmal im voraus

MfG

Wannabeapro

Content-Key: 67966

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

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

Member: miniversum
miniversum Sep 05, 2007 at 17:18:51 (UTC)
Goto Top
Ich interpretiere da jetzt 2 Möglichkeiten rein was du wollen köntest:
a) Du willst nur die 19. Zeile auslesen. Das geht dann so:
@echo off
set "gelesen="
FOR /F "skip=18 delims= " %%i in ("liste.txt") do if undefined gelesen (set quelle=%%i & set ziel=%%j & set gelesen=1)
echo %quelle%
echo %ziel%

b) Du willst alle Zeilen bis einschließlich 19 auslesen.
@echo off
setlocal enabledelayedexpansion
set zahl=1
FOR /F "delims= " %%i in ("liste.txt") do (
if !zahl! leq 19 (
set quelle=%%i
set ziel=%%j
set /a zahl=!zahl!+1
echo %quelle%
echo %ziel%
)
)

miniversum
Member: wannabeapro
wannabeapro Sep 05, 2007 at 17:43:55 (UTC)
Goto Top
Hallo

Danke für deine Antwort habe das gerade hier mal durch getestet und etwas abgeändert.
Nun gibt er mir den Datei namen aus Oo

@echo off
setlocal enabledelayedexpansion
set zahl=1
set quelle=muh
set ziel=muh
:schleife
FOR /F "delims= " %%i in ("liste.txt") do (  
if !zahl! leq 19 (
set quelle=%%i
set ziel=%%j
set /a zahl=!zahl!+1
echo %quelle%
echo %ziel%
pause
goto :schleife
if %zahl%==19 goto exit
)
)
exit

Im Commando Fenster gab er bei zurück änderung auch nur noch aus:

Echo is ausgeschaltet ; und Brach dann ab.

bei meiner abänderung deklariert er nur die erste Variable als "Dateiname"
die zweite läst er leer bzw schreib "%%j" rein.

Danke schon einmal für eure Hilfe.

MfG
wannabeapro
Member: Biber
Biber Sep 06, 2007, updated at Oct 18, 2012 at 16:32:25 (UTC)
Goto Top
Moin wannabeapro,

nach mehrmaligem Lesen bin ich zu dem Schluss gekommen, dass Du eine bestimmte Zeile lesen willst. Jedenfalls glaube ich das aus Deiner Beitragseröffnungsfrage herauszulesen.

Dazu ist u.a. ein Beispiel hier EINE Zeile aus TXT-Datei lesen.

In miniversums passendem Ansatz dazu (der Variante a) fehlt nur die TOKEN-Angabe und das "if undefined gelesen" sollte "if not defined gelesen" heißen.

Aber der kürzere Oneliner wäre dann sicher [vom CMD-Prompt]:
For /F "tokens=2,3* delims=, " %i in ('findstr /n "$" liste.txt^|findstr "^18:" ') do (@echo %i) & @Echo %j  
[Ungetestet, und im Batch wieder auf mehrere Zeilen verteilt und mit zwei Prozentzeichen etc].
Erläuterung: Ich suche mit Findstr /n [==mit Zeilennummern] alle Zeilen, und davon will ich nur Zeile 18 == die Zeile mit "18:" am Zeilenanfang.

Grüße
Biber
Member: wannabeapro
wannabeapro Sep 07, 2007 at 05:43:07 (UTC)
Goto Top
Hallo

Danke für eure Antworten das ist ja schon einiges.

Allerdings wollt ich nicht nur eine bestimmte Zeile auslesen sondern,
Jede zeile nacheinander einlesen.
In der Datei stehen wie folgt Pfade:
Quelle Ziel
Quelle Ziel
...

diese möcht ich dann nach einander einlesen und bsp die Quelle in die Variable %quelle% und das Ziel in die variable %ziel% speichern.
Diese werte solln dann noch innerhalb der Schleife an den Robocopy weiter gegeben werden.

Wie folgt:

robocopy %quelle% %ziel% /S /B /MAXLAD:xxx

Das Programm Robocopy soll dann inerhalb der Schleife noch ausgeführt werden.

Das hat den Sinn das wir die daten von einem server auf den anderen legen möchten allerdings mit einer anderen Ordnerstruktur.

Und dieses Script soll uns halt etwas zeit sparn damit wir nicht alles Manuell machen müssen.

Also im Bsp:

1. schleifen durchlauf
Zeile 1 auslesen

2. Durchlauf
Zeile 2

usw

Nach möglichkeit sollte das Programm sich von selbst Benden wenn das ende der txt erreicht ist.

MfG

Wannabeapro
Member: miniversum
miniversum Sep 07, 2007 at 15:34:08 (UTC)
Goto Top
Ok war ungetestet von mir.
Willst du die ganze Liste abarbeiten dann geht das so:
@echo off
FOR /F "tokens=1,2 delims= " %%i in ('type "liste.txt"') do (
echo robocopy %%i %%j /S /B /MAXLAD:xxx
)

Das echo vorm robocopy must du dann halt rausnehmen damit es richtig kopiert

miniversum
Member: wannabeapro
wannabeapro Sep 08, 2007 at 16:50:34 (UTC)
Goto Top
Hallo

besten Dank face-smile
Es Funktioniert wenn ich dran denke das ich da vorer nen 12-20 Zeiler drin stehn hat und es nun quasi nen 3 zeiler ist XD

Nunja da sieht man mal wieder face-smile aller anfang ist schwer.

Aber trozdem besten Dank.

MfG
wannabeapro