Mittels BAT eine Datei suchen und umbenennen

Kidow

Herzlich willkommen!
Hallo ihr,

ich hab eine Frage zur BAT-Programmierung. Also ich habe eine Verzeichnis mit mehreren Unterverzeichnissen. In den Unterverzeichnissen befinden sich Dateien die ich gerne umbenennen würde, da sie momentan alle gleich heißen ("coverage.xml"). Ich würde nun gerne mittels einer BAT Datei die coverage.xml 's suchen und ihnen einen neuen Namen geben.

Also suchen würde ich ja so
dir /s "coverage.xml"

und umbenennen so:
rename (die gefundene coverage.xml) bla.xml

ich habe gerad ein Problem damit es für alle gefundenen XML's auszuführen, wollte mittels einer for schleife rangehen, aber irgendwie klappts nicht. Könntet ihr mir vielleicht helfen?

Vielen Dank schoneimal
 
ungetestetes Beispiel:
Code:
@echo off

for /F %%i in ('dir /s /b "coverage.xml"') do (
	set /p nfn=Bitte den neuen Dateinamen angeben: 
	If not "%nfn%"==""
		ren %%i %nfn%
	set nfn=
)
 
Heyhey erstmal dickes danke schön! Klappt schon mal super! Nur habe ich noch ein Problem mit der Variablen.

So siehts bei mir gerad aus
Code:
for /F %%i in ('dir /s /b "coverage.xml"') do (
        set /p nfn= "ba.xml"
        ren "%%i" %nfn%
)

Ich bekomme Syntxfehler, da mein nfn anscheinend leer ist. Ruf ich sie falsch auf?

Vielen Dank schonmal nochmal :)
 
Klar rufst du den Set-Befehl falsch auf. Lies mal die Windows-Hilfe, "Befehlszeilenreferenz A-Z", da stehen alle Befehle drin.
Durch den Parameter wartet die Eingabeaufforderung darauf dass du was eingibst und dann Enter drückst.

I.ü. kannst du nicht denselben Namen für verschiedene Dateien verwenden, ausser, du lässt sie in den Ordnern wo sie sind...

Dann kannst du aber auch machen
Code:
for /F %%i in ('dir /s /b "coverage.xml"') do ren "%%i" "ba.xml"
 
ach mensch klar dummer Fehler mit dem /p warte ich auf ne Eingabe und deshalb war die Variable leer. Ich danke dir passt jetzt :)
 
Heyhey,

ich hab jetzt noch eine Frage zum umbenennen der Datei. Ich möchte sie gerne nach ihrem Hauptordner benennen. D.h. ich hab einen Pfad

C:\Users\Desktop\Projekt\Unterprojekt\target\site

Ich bräuchte den Teil wo hier "Unterprojekt" steht. Da sich immer der vordere Teil meines Pfades ändert, wollte ich den Pfad rückwärts untersuchen, denn dort bleibt target und site immer gleich. Jetzt meine Frage geht das mit einer bat überhaupt?

ich hatte jetzt den ansatz mit delims und tokens zu arbeiten.Wollte erst alle tokens nachzählen und 3 bzw 2 abziehen, da target und site immer gleich bleiben und dann das token an der Stelle ausgeben.

Ich hab jetzt so angefangen
Code:
set %sbasedir%=C:\Users\Desktop\Projekt\Unterprojekt\target\site
set count=0
for /F "delims=\  tokens=*" %%i in ("%sbasedir%") do set /A count+=1 
echo %count%
funktioniert leider nicht so wie ich möchte, da count immer 1 bleibt. Was mach ich denn falsch? Könntet ihr mir da helfen?

Vielen Dank schoneinmal!
 
Dickes danke für die Hilfe hat sehr weiter geholfen!

Bin nur wieder auf ein neues Problem gestoßen also mein code sieht zur Zeit so aus:
Code:
@echo off
set dir=%cd%
for %%i in (11 25) do (
    rem --Ordner mit Versionsnamen
    md %%i                                                 
    rem --nach coverage.xml suchen
    for /F %%j in ('dir /s /b "coverage.xml"') do ( 
        rem --Dateipfad umspeichern
        SET sbasedir=%%j                              
        rem --Vom Dateipfad die letzten 34Zeichen wegnehmen
        SET sbasedir=%sbasedir:~0,-34%    
        rem --Vom Pfad der Coverage.xml den aktuellen Pfad absplitten
        call set sbasedir=%%sbasedir:%dir%=%%
        echo fertig=%sbasedir%
        rem --coverage.xml umbennen nach Versionsnummer und dem            
        ergebnis vom schritt davor
        ren "%%j" %%i_%sbasedir%.xml
        
        rem--Datei suchen und verschieben
        for /F %%t in ('dir /s /b "%%i_%sbasedir%.xml"') do (
                move %%t %%i
        )
    )
)

also um mal allgemein zu sagen was ich machen will: ich möchte Testanalyse-Dateien (coverage.xml) umbenennen und dann in einen Ordner passend zu der Programmversion verschieben.

Ich hab mit dem obenstehenden Code irgendwie Problem, er bringt nach jeder Ausführung ein anderes Ergebnis. Überforder ich bat irgendwie oder vergess ich was? Die Funktionen alleinstehend ausgeführt funktionieren 1a, nur zusammen isses Bockmist.

Könntet ihr mir noch einmal helfen? Sorry die vielen Fragen, aber sind meine ersten zwei Tage mit bat :)

Danke schonmal
 
Danke für die Antwort nur leider funktioniert es nicht. Kann es sein, dass ich durch die zwei FOR-Schleifen Probleme bekomme?

EDIT: Ahh ich habs! Bei allen Variablen die in der FOR gesetzt werden ! anstatt einem % verwenden! Danke RAZORBLADE für die ganze Hilfe! Hast mir echt dolle geholfen! :)
 
Zuletzt bearbeitet:
ot:
Bis heute hab ich behauptet in Batch halbwegs fit zu sein, der letzte Code Post hat mich dann doch eines Besseren Belehrt.
Habt ihr beide noch mehr davon? :)
 
ot:
@MaXg:
Naja, der letzte code mag zwar komplex aussehen, ist er aber nicht.
Die For-Schleifen können nur auf den ersten Blick verwirrend erscheinen wenn man nicht hin und wieder mal mit denen arbeitet.
Ich such auch immer wieder wenn ich was in Batch machen soll/muss.

Ich kann dir aber meine Anlaufstellen nennen:
Windows-Hilfe (Themen):
Befehlszeilenreferenz A-Z
Verwenden von Batchparametern
Übersicht über die Eingabeaufforderung
Verwenden von Befehlsumleitungsoperatoren

Da findet man schon sehr viel hilfreiches.
Ansonst (v.a. bei Stringoperationen; also StringSplit, MidString, ...) schau ich auf der Seite nach: DosTips - The DOS Batch Guide

Sonst hab ich keine komplexeren Scripte lagernd, nur welche die Rudimentäre Sachen bearbeiten...
 
Hallo ich hab meine bat datei ein wenig erweitert und bekomme irgendwie ständig Fehler. Hier einmal mein Code:

Code:
@echo off & Setlocal
Setlocal EnableDelayedExpansion
for %%i in (11 25) do (
    SET MAVEN_OPTS="-Xmx256m"
    call mvn site
    md %%i
    for /F %%j in ('dir /s /b "coverage.xml"') do (set "sbasedir=%%j"&call:Processline "%%i" "%%j")
    for /F %%g in ('dir /s /b "TEST-*.xml"') do ( set "surefire=%%~ng"&set "surefire_path=%%~pg"&call:Process "%%i" "%%g")
)
goto :eof

:Processline
SET sbasedir=%sbasedir:~0,-35%
CALL SET "sbasedir=%%sbasedir:%cd%=%%"
SET "sbasedir=%sbasedir:~1%"
for /f "tokens=2 delims=\" %%a in ("%sbasedir%")  do set sbasedir=%%a
ren %2 "%1_%sbasedir%.xml"
for /F %%t in ('dir /s /b "%1_%sbasedir%.xml"') do move "%%t" %1
goto :eof

:Process
CALL SET surefire_file=%~1_%surefire%.xml
ren %2 %surefire_file%
SET path=%surefire_path%%surefire_file%
move "%path%" %1
goto :eof

ich hab hier Probleme mit :process. Ich hab das Gefühl nach dem Ausführen von :process nicht mehr richtig in meine Ausgangs-FOR-Schleife zu kommen, denn der mvn site Befehl wird im zweiten Durchlauf nicht erkannt. Habt ihr eine Idee warum?

Maven ist ein Build-Tool und erstellt mittel dem mvn site Befehl eine Übersicht über das Projekt.

Vielen Dank schon einmal
 
Zuletzt bearbeitet:
Oben