-kidow-
Goto Top

Batch Probleme Ausrufezeichen werden nicht interpretiert

Hallo ihr,

ich hab folgendes Problem mit einer Batch-Datei.

Hier mal mein Code:
@echo off
Setlocal EnableDelayedExpansion
for %%i in (11 25) do (
mvn site
md %%i
SET dir=%cd%
for /F %%j in ('dir /s /b "coverage.xml"') do (
SET sbasedir=%%j
SET sbasedir=!sbasedir:~0,-36!
SET sbasedir=!!sbasedir:%dir%=!!
SET sbasedir=!sbasedir:~1!
ren "%%j" %%i_!sbasedir!.xml
for /F %%t in ('dir /s /b "%%i_!sbasedir!.xml"') do (
move %%t %%i
)
)
)

Die .bat soll alle Dateien suchen, die coverage.xml heißen, diese nach ihrem Projekt-Ordner benennen und in ihren Versions-Ordner(hier die 11 und die 25) schieben. Ich hab jetzt das Problem, dass alles super läuft sobald ich mvn site rausnehme . Wenn mvn site allerdings drin steht, kommts mir so vor, als würden die ! nicht mehr interpretiert werden. Hatte einer vielleicht ein ähnliches Problem und kann mir helfen?

Ich verwende den Maven Site Befehl, um passend zum Projekt eine Projektübersicht(also hier die coverage.xml) zu erstellen.

Ich dank euch schonmal im vorraus!

Content-Key: 152715

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

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

Mitglied: 60730
60730 Oct 10, 2010 at 18:14:26 (UTC)
Goto Top
Moin,

3 Dinge:

  • verwende bitte Code Blöcke
  • bei Problembatchen kein führendes @echo off
  • bei EnableDelayedExpansion keine %% sondern !!

Wenn mvn site allerdings drin steht, kommts mir so vor
Da mir mvn site genausowenig sagt, wie jedem anderen außer dir - solltest du dir deren Inhalt genauer ansehen.

Gruß
Member: bastla
bastla Oct 10, 2010 at 18:22:42 (UTC)
Goto Top
Hallo -Kidow- und willkommen im Forum!

Das "!"-Problem ist der Preis, den Du für die Verwendung von "delayedExpansion" zahlen musst - daher ist oft eine Vermeidungsstrategie vorteilhafter, zB (ungestest):
@echo on & Setlocal
for %%i in (11 25) do (
    mvn site
    md "%%i"  
    for /F %%j in ('dir /s /b "coverage.xml"') do set "sbasedir=%%j" & call :ProcessLine "%%i" "%%j"  
)
goto :eof

:ProcessLine    
SET "sbasedir=sbasedir:~0,-36"  
call SET "sbasedir=%%sbasedir:%cd%=%%"  
SET "sbasedir=%sbasedir:~1%"  
ren %2 "%~1_%sbasedir%.xml"  
for /F %%t in ('dir /s /b "%1_%sbasedir%.xml"') do move "%%t" %1  
goto :eof
Grüße
bastla
Member: jeb-the-batcher
jeb-the-batcher Oct 10, 2010 at 19:30:04 (UTC)
Goto Top
* bei EnableDelayedExpansion keine %% sondern !!

Aber wie soll das denn gehen?

@echo off
setlocal EnableDelayedExpansion

for  %%a IN ("XYZ") DO (  
  echo per=%%a
  echo exc=!!a
)

Wäre schön wenn es funktionieren würde, klappt aber leider nicht (oder ich habe deinen Kommentar nicht verstanden).

Gruß

jeb
Member: jeb-the-batcher
jeb-the-batcher Oct 10, 2010 at 19:36:04 (UTC)
Goto Top
Hallo bastla,

so wie ich Kidow verstehe ist das Problem, das die !var! Auflösung nicht mehr läuft, nicht das verschwinden von Ausrufezeichen in der Ausgabe.

Meiner Ansicht nach ist DelayedExpansion in den meisten Fällen die bessere Wahl, einfach weil die ganzen Sonderzeichen nicht weiter verarbeitet werden.
Es bleibt nur das Problem, irgendwie "problematische" Strings mit "!" und "^" in eine Variable zu bekommen, sobald man nur mit den Variablen arbeiten kann, gibt es das "!"-Problem ja nicht mehr.

Gruß
jeb
Member: bastla
bastla Oct 10, 2010 at 19:44:36 (UTC)
Goto Top
Hallo jeb!
so wie ich Kidow verstehe ist das Problem, das die !var! Auflösung nicht mehr läuft, nicht das verschwinden von Ausrufezeichen in der Ausgabe.
... was bei Nicht-Verwendung der "delayedExpansion" aber eigentlich egal sein sollte (allerdings habe ich tatsächlich nur oberflächlich drübergeschaut und den Batch nicht wirklich nachvollzogen) ...

Grüße
bastla
Member: -Kidow-
-Kidow- Oct 11, 2010 at 10:17:46 (UTC)
Goto Top
Hallo ihr,

erst einmal dickes Dankeschön für die Hilfe! Ich hab es einmal mit dem Beispiel von bastla versucht und bekomme nin leider folgenden Fehler: "Ungültiger Versuch, ein Sprungziel außerhalb einer Batchdatei aufzurufen." Ich kann leider nicht recht was damit anfangen, da die .bat Datei mal wieder ohne den mvn site Befehl super funktioniert. Könntet ihr mir da eventuell nocheinmal weiterhelfen? Google irgendwie schon relativ lange und komm auf keinen grünen Zweig hier!

Um noch kurz zu erklären was Mvn site macht : Maven ist ein Build-Tool und erstellt unteranderem mit mvn site erstellt eine Übersichtsseite(welche Klassen enthalten sind, wer daran gearbeitet hat) zu einem Projekt. Diese Daten benötige ich pro Version des Projekts.


Danke schoneinmal
Member: -Kidow-
-Kidow- Oct 12, 2010 at 09:46:49 (UTC)
Goto Top
Hallo,

es hat geklappt! Hab ein call vor dem mvn site Befehl gesetzt und jetzt funktioniert es. Danke an euch nochmal!
Member: bastla
bastla Oct 12, 2010 at 11:12:35 (UTC)
Goto Top
Hallo -Kidow-!
es hat geklappt!
Das ist erfreulich face-smile - und wenn Du erwähnt hättest, dass mit "mvn" ein weiterer Batch aufgerufen wird, hätten wir das vielleicht schon früher hinbekommen ....

Grüße
bastla