rotnasenkater
Goto Top

Programm in allen Unterverzeichnissen ausführen

Servus, liebe Gemeinde!
Da mir hier schonmal so freundlich und kompetent geholfen wurde, wende ich mich nochmals mit einer Batch-Frage an Euch.

Folgende Ausgangssituation: ich habe über 800 Unterverzeichnisse, in denen jeweils ein mit ECM gepacktes ISO ist. Zum Entpacken benutze ich das Programm "unecm.exe". Ich will das nun automatisieren, so daß die jeweilige ECM-Datei entpackt wird, nach erfolgreichem (!) Entpacken die ECM-Datei gelöscht wird und es dann im nächsten Unterverzeichnis weitergeht. Vielleicht nochmal zur Veranschaulichung die Filestruktur:

unecm.exe
Verzeichnis 1\iso1.iso.ecm
Verzeichnis 2\iso2.iso.ecm
Verzeichnis 3\iso3.iso.ecm
Verzeichnis 4\iso4.iso.ecm
...

nach dem Entpacken:

unecm.exe
Verzeichnis 1\iso1.iso
Verzeichnis 2\iso2.iso
Verzeichnis 3\iso3.iso
Verzeichnis 4\iso4.iso
...

Es kann sein, daß unecm.exe in jedes Verzeichnis verschoben/kopiert werden muß - keine Ahnung, das sehe ich erst bei ausprobieren der Batchdatei.

Vielen Dank im voraus!

Content-ID: 311199

Url: https://administrator.de/forum/programm-in-allen-unterverzeichnissen-ausfuehren-311199.html

Ausgedruckt am: 22.01.2025 um 10:01 Uhr

129813
Lösung 129813 29.07.2016 um 10:21:11 Uhr
Goto Top
Don't know the tool, but try this.(change paths)
@echo off
for /f "delims=" %%a in ('dir /b /s /a-d "c:\RootFolder\*.ecm"') do (  
    "c:\tools\unecm.exe" "%%a" && del "%%a"  
)
Regards
Rotnasenkater
Rotnasenkater 29.07.2016 um 10:47:58 Uhr
Goto Top
Perfekt! Dankeschön, haut wunderbar hin...

Perfect! Thanx a lot, works like a charm...
Biber
Biber 29.07.2016 aktualisiert um 10:53:09 Uhr
Goto Top
Moin Rotnasenkater,

ergänzend zu highloads Skizze würde ich noch zusätzlich mit PushD/PopD jeweils in das Verzeichnis wechseln, in dem die Quell-*.ecm-Datei liegt.

Andernfalls sind evtl hinterhr alle *.iso-Dateien in dem Ordner, in dem du die Batch gestarttet hast.

@echo off
for /f "delims=" %%a in ('dir /b /s /a-d "c:\RootFolder\*.ecm"') do (  
    PushD "%%~dpa"  
    "c:\tools\unecm.exe" "%%a" && del "%%a"  
   PopD
)

Grüße
Biber

[Edit] Kommentar hat sich mit deiner Antwort überschnitten. Also bitte ignorieren. [/Edit]
Rotnasenkater
Rotnasenkater 29.07.2016 um 12:43:03 Uhr
Goto Top
"... Andernfalls sind evtl hinterhr alle *.iso-Dateien in dem Ordner, in dem du die Batch gestarttet hast. ..."

Ist zum Glück bisher noch nicht passiert, aber danke für die Ergänzung. Weiß jetzt wenigstens was ich zu tun habe, wenn's wirklich mal daran klemmt...

Hab's gerade ausprobiert, und bekomme eine Fehlermeldung "Das System kann den angegebenen Pfad nicht finden". Funktioniert Deine Batch überhaupt unter einem "nackigen" Win7 Pro? Die von highload funktioniert ohne Probleme...
Biber
Biber 29.07.2016 um 13:28:19 Uhr
Goto Top
Moin Rotnasenkater,

auch die von mir ergänzte Variante sollte funktionieren - kenne jetzt keine Version Win 7 oder höher, die PushD/PopD nicht kennt.

Habe gerade noch folgende FOR-Konstruktion am Cmd-Prompt (Win 7) getestet:
for /f "delims=" %a in ('dir /b /s /a-d "K:\temp\*.txt"') do @pushD "%~dpa" & cd & PopD  
In diesem PoC ist dein "c:\Start\Mir\Mein\ProgrammXY.exe" ersetzt durch ein cd. und es wird mir jeweils das richtig gesetzte Verzeichnis angezeigt.

Wüsste nicht, was noch fehlt/schiefläuft.

Grüße
Biber
Rotnasenkater
Rotnasenkater 29.07.2016 um 19:02:55 Uhr
Goto Top
Ich habe mal Deinen Einzeiler als Batch-Datei abgespeichert (test.bat) und ausgeführt.

for /f "delims=" %a in ('dir /b /s /a-d "d:\temp\*.txt"') do @pushD "%~dpa" & cd & PopD  

Ergebnis s. Screenshot. Was haut da bei mir nicht hin, muß ich im Windows noch irgendwas umstellen? Das Verzeichnis d:\temp existiert natürlich und ist mein Standard-Tempverzeichnis.

Grüße

screenshot
129813
Lösung 129813 29.07.2016 aktualisiert um 19:30:26 Uhr
Goto Top
You did it absolutely wrong, have a sharp look at your commandline in the screenshot!!

screenshot
This is absolutely not the line above face-big-smile

This line is for executing it directly on the commandline (entering it manually in the console):
for /f "delims=" %a in ('dir /b /s /a-d "d:\temp\*.txt"') do @pushD "%~dpa" & cd & PopD  
You see the "single percent signs %".

Inside a batch file you must double those:
for /f "delims=" %%a in ('dir /b /s /a-d "d:\temp\*.txt"') do @pushD "%%~dpa" & cd & PopD  

So it's only a matter of your "precision" face-wink

Regards
Rotnasenkater
Rotnasenkater 29.07.2016 um 20:04:52 Uhr
Goto Top
Ah jetzt haut's hin. Danke