Seite 1 von 1

set Problem

Verfasst: Do 26. Mär 2009, 08:41
von GASt
Hallo,
ich bastle gerade an einer Batch Datei. Alles funktioniert soweit bis auf eine Kleinigkeit.

Code: Alles auswählen

:: Erfassung der Revision von veränderten Dateien
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
for /F "tokens=1*" %%i IN (%HELP_PATH%\vorhanden.txt) DO (

echo %%i
svn log -q %TAG_PATH%\%%i > %HELP_PATH%\revtag.txt

for /F "eol=- tokens=1" %%i IN (%HELP_PATH%\revtag.txt) DO (
set ausgabe=%%i)
echo %ausgabe% %%i  >> %HELP_PATH%\puzzletag.txt 

svn log -q %BRANCH_PATH%\%%i > %HELP_PATH%\revbranch.txt
for /F "eol=- tokens=1" %%i IN (%HELP_PATH%\revbranch.txt) DO (
set ausgabe=%%i)
echo %ausgabe% %%i >> %HELP_PATH%\puzzlebranch.txt
)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
In vorhanden.txt befinden sich Dateinamen alla dateiname.sql diese werden per svn log auf ihre Revision hin geprüft. Die Revision wird über die innere Schleife "zurechtgestuzt" auf z.B r39. innerhalb der Schleife wird set ausgabe mit dem revisionswert belegt. Im Anschluss soll der Revisionswert vor dem Dateinamen ausgegeben und in puzzle gespeichert werden.
das erhofft Bild wäre
r32 dateiname.sql
r29 dateiname2.sql
r49 dateiname3.sql
...

Nun zum Problem. Der Revisionswert wird zwar Einwandfrei auf das gewünschte zugeschnitten, jedoch, wenn die Schleife durchlaufen wird, nimmt ausgabe den 2. Wert an und behält diesen permanent, so dass die Ausgabe folgende ist.
r29 dateiname.sql
r29 dateiname2.sql
r29 dateiname3.sql
....

Was mache ich falsch? Eventuelle Ansätze. Löschen von ausgabe nach der Anwendung. Überschreiben von ausgabe oder ein völlig anderer Weg?

Verfasst: Do 26. Mär 2009, 14:52
von gbalzarek
ohne es jetzt näher untersucht zu haben:
Hast Du zwei Schleifen ineinander geschachtelt und sie verwenden die gleiche Laufvariable %%i ?

Verfasst: Do 26. Mär 2009, 16:00
von Gast
Sie benutzen zwar die gleichen Laufvariablen, aber das ist nicht das Problem (hab ich getestet). Gibt es vielleicht eine Möglichkeit eine Art "echo %%i >> text.txt" zu machen, bei dem bei erneutem aufruf des echos keine neue Zeile angefangen wird?

z.B
echo r29 >> text.txt (ohne neue Zeile)
echo dateiname >> text.txt (mit neuer Zeile)

Als Ergebnis: r29 dateiname

Oder gibt es die möglichkeit eine Datei der Form:
r29
dateiname
r32
dateiname2
usw.

in eine Datei der Form
r29 dateiname
r32 dateiname
usw.

umzuwandeln?

Verfasst: Fr 27. Mär 2009, 10:43
von gbalzarek
Ich habe bei der Suche im Internet irgendwo gelesen, daß in Batchdateien geschachtelte For-Schleifen nicht zulässig sind.
Welches DOS hast Du denn?

Verfasst: Mo 30. Mär 2009, 09:33
von GASt
Ich habe jetzt folgendes zum laufen (und relativen funktionieren) gebracht

Code: Alles auswählen

for /F "tokens=1*" %%i IN (%HELP_PATH%\vorhanden.txt) DO (
	echo %%i
	svn log -q %TAG_PATH%\%%i > %HELP_PATH%\revtag.txt

	for /F "eol=- tokens=1" %%j IN (%HELP_PATH%\revtag.txt) DO (
		echo %%j %%i >> %HELP_PATH%\puzzletag.txt 
		)

	svn log -q %BRANCH_PATH%\%%i > %HELP_PATH%\revbranch.txt
	for /F "eol=- tokens=1" %%j IN (%HELP_PATH%\revbranch.txt) DO (
		echo %%j %%i  >> %HELP_PATH%\puzzlebranch.txt 
	)
)
Ich möchte nun allerdings, dass die for Schleife nach dem 1. Durchlauf verlassen wird. Ich habe das schon über ein goto versucht, das nach draußen führen sollte, aber das führte nur zu einem Syntaxfehler. Wie kann ich die for Schleife so umschreiben, dass sie durchgeführt, aber beim 1. mal verlassen wird?

Verfasst: Mo 30. Mär 2009, 09:40
von GASt
Ich benutze eine normale cmd DOS Box

Verfasst: Di 31. Mär 2009, 16:18
von Gast
...

Das ist kein DOS, das ist eine kommandozeile!