weissgarnix
Goto Top

Batch in unterordner starten

hallo ,
ich habe ein riesen problem.
ich will mehrere unterordner nach batch dateien durchsuchen und die gefundenen .bat alle nacheinander ausführen.

for /f "delims=" %%i in ('dir /a-d /b /s *.bat') do
bis hierhin bin ich gekommen aber die bats lassen sich nicht im unterordner ausführen .

kann das einer besser...help..
Kommentar vom Moderator Biber am Jan 18, 2012 um 18:48:41 Uhr
Aus einem Kommentar des TO:
...hier die umbennenen bat
Set /a rgc +=1
#792

Content-Key: 179036

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

Printed on: April 18, 2024 at 08:04 o'clock

Member: bastla
bastla Jan 17, 2012 at 11:13:39 (UTC)
Goto Top
Hallo weissgarnix und willkommen im Forum!
die bats lassen sich nicht im unterordner ausführen .
kann ich nicht wirklich nachvollziehen - wenn sie nacheinander ausgeführt werden sollen:
for /f "delims=" %%i in ('dir /a-d /b /s *.bat') do call "%%i"
ansonsten
for /f "delims=" %%i in ('dir /a-d /b /s *.bat') do start "" "%%i"
Vielleicht solltest Du aber doch noch etwas genauer erklären, wozu die ganze Aktion gedacht ist ...

Grüße
bastla

P.S.: "Code"- ist besser lesbar und lässt sich auch noch im Nachhinein realisieren ...
Member: weissgarnix
weissgarnix Jan 17, 2012 at 16:17:39 (UTC)
Goto Top
hallo bastla

ich danke dir schon mal für deine bemühungen, und versuche das unding noch mal zu erklearen.

Also ich habe eine basis .bat im hauptordner liegen , diese soll nach start in allen unterornern des haupordner die anderen .bat,s finden und direkt eine nach der anderen ausführen.

Ich habe es schon geschaft diese bat,s anzeigen zu lassen aber ich weiß nicht wie man bat.s ausführt, die in einem unbestimmten ordner gefunden werden.

Also der nahme der zu suchenden bat ist start.bat und die liegen in unterordnern, in denen sie dann von der ersten aktivierten bat im hauptordner ausgeführt werden sollen.

vieleicht verstehst du jetzt wo meine schwierigkeit dabei ist.

vieleicht klappt es ja über einen umweg.

grüße und danke weissgarnix
Member: bastla
bastla Jan 17, 2012 at 18:25:12 (UTC)
Goto Top
Hallo weissgarnix!

Eigentlich sollte dann doch mein erster Ansatz passen (wobei sich die Suche noch auf "start.bat" anstelle von "*.bat" einschränken ließe) ...

Grüße
bastla
Member: weissgarnix
weissgarnix Jan 17, 2012 at 18:33:06 (UTC)
Goto Top
ansatz ist bestimmt richtig die start,bat dateien werden gefunden aber dann führt das programm nicht die gefundenen dateien start.bat im unterorner aus.
grüße und danke weissgarnix
Member: bastla
bastla Jan 17, 2012 at 18:35:51 (UTC)
Goto Top
Hallo weissgarnix!
dann führt das programm nicht die gefundenen dateien start.bat im unterorner aus.
... sondern?

Ich habe mal ein paar (einzeilige) "start.bat" in Unterordnern verteilt - wo die liegen und was drin steht zeigt
findstr /s "^" start.bat
mit folgendem Ergebnis
Test\start.bat:@echo in Test
Test\alt\start.bat:@echo in alt
Leer\start.bat:@echo in Leer
und ich dann die Batchdatei "RunBatches.cmd" mit folgendem Inhalt
for /f "delims=" %%i in ('dir /a-d /b /s start.bat') do @call "%%i"
ausführe, sieht das Ergebnis so aus:
in Test
in alt
in Leer
Grüße
bastla
Member: weissgarnix
weissgarnix Jan 17, 2012 at 18:55:54 (UTC)
Goto Top
die haupt batch start bat die auch im haupvezeichnis des ordner liegt

also im hauptordner liegt eine batch die wird in alle unterordner kopiert wo sie dann mit der rectots.exe einen ts film in trp format umwandeln soll.
diese start.bat im unterordner wird aber nicht ausgeführt sondern die start.bat im haupordner und da liegt keine ts datei .

ich kriege das einfach nicht hin dass, die gefundenen start,bat,s in den unterordnern, nacheinander die ts filme die auch in den unterornern liegen umwandeln.

diese drei dateien liegen in den unterordnern 1. start bat

hier der code

md temp
RecToTs *.ts %cd%/temp\ /8
for /F "Tokens=*" %%i in ('Dir /B *.ts') do move temp "%%~ni

der startet die 2. rectots.exe die die 3. ts datei umwandelt.

diese drei dateien müssen im selben unterordner liegen um zu funktionieren.

wobei ich nur die start.bat zum laufen bringen muss und zwar von der die im oberordner liegt

code for /f "delims=" %%i in ('dir /a-d /b /s *start.bat') do start "" "%%i"

ich hoffe ich konnte dir das jetzt ein bischen besser erklaeren wo die scwierigkeit bei dieser sache liegt.

ich habe schon alles versucht und komme einfach nicht weiter.

aber vieleicht geschehen ja noch wunder .

ich danke dir für deine mühe und hoffe es gibt etwas das problem zu lösen

grüsse weissgarnix
Member: bastla
bastla Jan 17, 2012 at 20:17:46 (UTC)
Goto Top
Hallo weissgarnix!

Verständlicher ist es damit auch nicht wirklich geworden, aber unter der Annahme, dass der jeweilige Unterordner aktiv sein muss, würde ich einfach an den Anfang jeder "start.bat" ein
cd /d "%~dp0"
setzen ...

BTW: %cd% am Beginn einer Pfadangabe ist witzlos ...

Grüße
bastla
Member: icsat
icsat Jan 18, 2012 at 08:45:28 (UTC)
Goto Top
Hallo bastla, hallo weissgarnix,

ich hoffe mal das Problem erkannt zu haben und hätte zwei Lösungsvorschläge:

1. Umbenennen des Ausgangsskriptes (Abweichender Name zu den Anderen Skripten).
2. Ergänzen von bastla's (bei ihm wegen Punkt 1 funktionierender) Codezeile um eine if Abfrage:
for /f "delims=" %%i in ('dir /a-d /b /s start.bat') do if "%%i" NEQ "%~f0" @call "%%i"  

Grund:
Der "dir" finden natürlich neben allen "start.bat" in den Unterverzeichnissen auch sich selbst und startet sich damit selbst immer und immer wieder face-wink


Schönen Tag noch

icsAT
Member: weissgarnix
weissgarnix Jan 18, 2012 at 18:17:00 (UTC)
Goto Top
Hallo bastla Hallo icsat

Spitze jungs....!!!!

cd /d "%~dp0" war schon super..... !!!!! ! in jede start,bat

und for /f "delims=" %%i in ('dir /a-d /b /s start.bat') do if "%%i" NEQ "%~f0" @call "%%i" hat dann gefunst ....!!!!!! bis auf ne kleinigkeit

die rectots.exe macht mir im hauptordner immer ne temp da da auch eine rectots.exe die ich fohrher in alle unterordner kopiert habe.


und ich kriege die rectots.exe und start.bats nicht aus den unterverzeichnissen raus.

da nachher nur noch der .ts film drin liegen soll.

nochmal vielen ... dank für die anregung

ich zeig euch mal das cödlein---


call Umbenennen.bat

hier die umbennenen bat


@echo on & setlocal


for /F "delims=" %%i in ('dir /b /a-d "* *" 2^>nul') do call :ProcessFile "%%i"


:ProcessFile

set "Name=%~nx1"
ren %1 "%Name: =_%"


un weiter gehts....


sleep 10

for /F "Tokens=*" %%i in ('Dir /B *.ts') do md "%%~ni"|move "%%i" "%%~ni"


for /f "delims=" %%i in ('dir /a-d /b /s *.ts') do copy "RecToTs.exe" "%%~dpi"


for /f "delims=" %%i in ('dir /a-d /b /s *.ts') do copy "start.bat" "%%~dpi"


cd /d "%~dp0"
for /f "delims=" %%i in ('dir /a-d /b /s start.bat') do if "%%i" NEQ "%~f0" @call "%%i"


Hier die start.bat

cd /d "%~dp0"
md temp
RecToTs *.ts %cd%/temp\ /8
for /F "Tokens=*" %%i in ('Dir /B *.ts') do move temp "%%~ni

un weiter gehts....

FOR /R %indir% %%i IN (*.ts) DO move "%%i" %outdir%
FOR /R %%i IN (*.exe) DO del "%%i"

un der letze punkt soll dann die rectotss. exe und start.bat aus den unterordnern löschen,
Member: bastla
bastla Jan 18, 2012 at 19:40:50 (UTC)
Goto Top
Hallo weissgarnix!

Um den Ausgangsordner nicht mit zu verarbeiten (was eine weitere Lösung wäre, um das Ausführen der "start.bat" dort zu vermeiden), könntest Du folgende Schleife verwenden:
for /d %%o in (*) do for /f "delims=" %%i in ('dir /a-d /b /s "%%o\start.bat"') do call "%%i"
Auf die gleiche Art sollten sich die vielen "rectots.exe" und "start.bat" (von denen ich einfach nicht glauben mag, dass die wirklich alle nötig sind face-wink) wieder loswerden lassen:
for /d %%o in (*) do (
    del /s /q "%%o\rectots.exe" >nul 2>nul  
    del /s /q "%%o\start.bat" >nul 2>nul  
)
Grüße
bastla

[Edit] Falls es Unterordner ohne "start.bat" geben sollte, wäre
for /d %%o in (*) do for /f "delims=" %%i in ('dir /a-d /b /s "%%o\start.bat" 2^>nul') do call "%%i"
etwas "schöner" ...
[/Edit]
Member: weissgarnix
weissgarnix Jan 18, 2012 at 20:27:30 (UTC)
Goto Top
hallo bastla

dake für die schnelle antwort.

Hab die erste zeile for /d %%o in (*) do (for /f "delims=" %%i in ('dir /a-d /b /s "%%o\start.bat"') do call "%%i") ausprobiert der temporaere ordner taucht nicht mehr auf aber es wandelt nur eine ts datei in einem ordner um und nicht die anderen.

ich versuch noch ein par sachen zu aendern aber ich weis nicht ob ich das so richtig hin krieg.

danke dir sehr führ deine hilfe.
Member: bastla
bastla Jan 18, 2012 at 20:38:37 (UTC)
Goto Top
Hallo weissgarnix!
wandelt nur eine ts datei in einem ordner um und nicht die anderen.
Schwer nachvollziehbar - es ändert sich ja nichts am Aufruf der Batches in den Unterordnern ...

Grüße
bastla

P.S.: Darf ich Dich nochmals (wie schon in meinem ersten Kommentar oben) auf die Möglichkeit der "Code"- hinweisen?
Member: Biber
Biber Jan 19, 2012 at 16:05:40 (UTC)
Goto Top
[OT]
Moin bastla,

Zitat von @bastla:
P.S.: Darf ich Dich nochmals (wie schon in meinem ersten Kommentar oben) auf die Möglichkeit der
"Code"- hinweisen?
Falls du weiterhin diesbezüglich ignoriert wirst ->dann verschiebe ich den Beitrag in einen angemesseren Bereich.

@weissgarnix
Ich finde den Beitrag ganz schön anstrengend, aber es liegt weniger an der Komplexität der Aufgabe, eher an der Formulierung.

Oder anders ausgedrückt: wenn du das Problem in Form eines 3minütigen Videoclips hier eingestellt hättest und wir hätten auch sehen können, was da auf deinem Monitor zu sehen ist....
-> dann wäre schon drei Tage lang ein grüner Haken dran.

Grüße
Biber
[/OT]