nexxtt
Goto Top

Per Batch Programme ausführen und Dateien umbenennen

Hallo,

ich habe folgendes Problem:
Ich will ein Javaprogramm ausführen, dessen Parameter sind 100 html Seiten aus einem Ordner.
Der Java-Aufruf sieht folgendermaßen aus:

java -cp .;c:\programme\aspectj\lib\aspectjrt.jar org.htmlcleaner.CommandLine src=website.htm

Ausgabe dieses Programmes ist IMMER eine Datei namens trace.xml, diese soll dann umbenannt werden in 1.xml bis 100.xml

Ich hab mir also eine Batch-Datei geschrieben, die in einer FOR Schleife das Programm mit allen Webseiten aus einem Ordner aufruft und danach abhängig von einem Zähler die Datei umbenennt. Allerdings klappt es nicht.
Nur die erste Datei wird umbenannt in 1.xml. Der Zähler wird scheinbar nicht richtig hochgesetzt, bleibt immer bei 1 und somit schlägt das umbennen immer fehl. Hat jemand eine Idee, wie es funktionieren könnte?

Das hier ist bis jetzt mein Ansatz:

set i=1
FOR %%f IN (HTMLDateien\*.htm) DO (java -cp .;c:\programme\aspectj\lib\aspectjrt.jar org.htmlcleaner.CommandLine src=%%f
ren trace.xml %i%.xml
set /A i=%i%+1)

Danke schonmal

Content-Key: 95052

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

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

Member: bastla
bastla Aug 22, 2008 at 06:48:33 (UTC)
Goto Top
Hallo nexxtt und willkommen im Forum!

So sollte es gehen:
@echo off & setlocal enabledelayedexpansion
set i=1
FOR %%f IN (HTMLDateien\*.htm) DO (
    java -cp .;c:\programme\aspectj\lib\aspectjrt.jar org.htmlcleaner.CommandLine src=%%f
    ren trace.xml !i!.xml
    set /A i+=1
)
Grüße
bastla
Member: nexxtt
nexxtt Aug 22, 2008 at 13:34:45 (UTC)
Goto Top
Okay, vielen Dank! Das tut so.
Was war denn der Fehler? War es diese verzögerte Variablenbelegung? Ich hab sie eigentlich extra vorher mit cmd /V:OFF abgeschaltet.
Member: bastla
bastla Aug 22, 2008 at 16:13:18 (UTC)
Goto Top
Hallo nexxtt!

War es diese verzögerte Variablenbelegung?
Ja. Ohne "delayedExpansion" wird der Wert von Variablen nur am Beginn einer Schleife ermittelt - Du kannst zwar den Variableninhalt innerhalb der Schleife verändern, aber ohne ausdrücklilche Aufforderung (nämlich die Variablen "verzögert" - also jeweils erst dann, wenn sie gerade benötigt werden - auszuwerten) interessiert das den Interpreter überhaupt nicht.

Grüße
bastla
Member: nexxtt
nexxtt Sep 01, 2008 at 10:17:53 (UTC)
Goto Top
Hallo, nachdem ich hier schon bei der ersten Frage super Hilfe bekommen habe, würde ich das Script gerne ein wenig ausbauen, stoße aber schon wieder an meine Grenzen bei Batchfiles.

Also ich hab nun dieses Script von bastla, dass mir die 100 xml Files ausgibt und umbenennt von 1 bis 100.

Diese Programm gibt aber nicht nur eine xml Datei aus, sondern in die Konsole wird auch noch was geschrieben. Diese Ausgabe möchte ich in eine Datei umleiten und diese Dateien dann analog zu den xml Dtaien in 1.txt bis 100.txt umbennen.
So dann habe ich mir noch cygwin runtergeladen, wo ein paar Linuxtools dabei sind und so kann ich in der Kommandozeile auch den diff Befehl benutzen.
Beispielsweise liefert der Ausdruck

diff Datei1.txt Datei2.txt

als Ausgabe gar nichts, wenn die Dateien genau identisch sind oder "Files Datei1.txt and Datei2.txt differ", wenn sie sich unterscheiden.

Ich will nun automatisiert mit diesem diff Befehl die Konsolenausgabe gegen Referenzdateien vergleichen.

Folgender Code drückt wohl semantisch aus, was ich gerne haben will, tut aber leider nicht das gewünschte face-sad.

[code]

@echo off & setlocal enabledelayedexpansion
set i=0
FOR %%f IN (HTMLDateien\*.htm) DO (
java -cp .;c:\users\roland\programme\aspectj\lib\aspectjrt.jar org.htmlcleaner.CommandLine src=%%f > !i!.txt
ren trace.xml !i!.xml
diff !i!.txt ..\..\original\!i!.txt >> differ.txt
set /A i+=1
)

[/code]

Also was jetzt neu dazukam ist "> !i!.txt" nach dem Javaaufruf um die Ausgabe in ein txt File umzuleiten und neu dazukam die Zeile "diff !i!.txt ..\..\original\!i!.txt >> differ.txt" um das entstandene txt File mit einer Referenz zu vergleichen und die ganze Ausgabe dann an das File differ.txt anzuhängen.
Ideal wäre es natürlich wenn es als neue Zeile angehängt werden würde, aber ich weiß nicht ob das überhaupt machbar ist.

Danke schonmal
Member: bastla
bastla Sep 01, 2008 at 12:10:57 (UTC)
Goto Top
Hallo nexxt!

Für mich sieht Dein Code schon ganz vernünftig aus - soferne die "diff.exe" gefunden werden kann (da ihr Verzeichnis in %path% eingetragen ist bzw sie im aktuellen Ordner liegt), sollte das eigentlich klappen ...

Falls doch nicht, kannst Du zum Debuggen zunächst einmal aus dem "echo off" ein "echo on" machen und so die Befehle (mit aufgelösten Variablen) vor der Ausführung anzeigen lassen. Wenn Du beim Aufruf der Batchdatei noch eine Umleitung der Ausgabe (auch von Kanal 2 = STDERR) hinzufügst, kannst Du diese Ausgaben auch als Textdatei erhalten, zB
DeinBatch.cmd>BatchLog.txt 2>&1

Grüße
bastla

P.S.: In diesem Forum erreichst Du die Formatierung als Code mit <> anstelle von