Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Per Batch Programme ausführen und Dateien umbenennen

Frage Microsoft Windows Tools

Mitglied: nexxtt

nexxtt (Level 1) - Jetzt verbinden

22.08.2008, aktualisiert 01.09.2008, 5521 Aufrufe, 5 Kommentare

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
Mitglied: bastla
22.08.2008 um 08:48 Uhr
Hallo nexxtt und willkommen im Forum!

So sollte es gehen:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set i=1 
03.
FOR %%f IN (HTMLDateien\*.htm) DO ( 
04.
    java -cp .;c:\programme\aspectj\lib\aspectjrt.jar org.htmlcleaner.CommandLine src=%%f 
05.
    ren trace.xml !i!.xml 
06.
    set /A i+=1 
07.
)
Grüße
bastla
Bitte warten ..
Mitglied: nexxtt
22.08.2008 um 15:34 Uhr
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.
Bitte warten ..
Mitglied: bastla
22.08.2008 um 18:13 Uhr
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
Bitte warten ..
Mitglied: nexxtt
01.09.2008 um 12:17 Uhr
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 .

[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
Bitte warten ..
Mitglied: bastla
01.09.2008 um 14:10 Uhr
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
01.
DeinBatch.cmd>BatchLog.txt 2>&1
Grüße
bastla

P.S.: In diesem Forum erreichst Du die Formatierung als Code mit <> anstelle von []
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Batch die alle Dateien löscht die Älter als 3 Tage sind (5)

Frage von Azubine zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Änderungsdatum von Dateien vergleichen und ältere löschen (10)

Frage von 129528 zum Thema Batch & Shell ...

Batch & Shell
gelöst Per Batch FTP-Server Dateien ändern (1)

Frage von Marlon1 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (22)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...