Callbatch für mehrere andere Batchdateien in verschiedenen Ordnern
Hiho Leude, ma wieder ne Frage 
Ich hab mehrer Batchdateien in unterschiedlichen ordnern auf ner Festplatte und diese sollen nacheinander aufgerufen und abgerabeitet werden.
Hab es schon versucht mit "Call", aber das funktioniert nicht, da die Batchdateien in den jeweiligen Ordnern ausgeführt werden müssen und die somit an anderer Stelle nicht funktionieren.
Desweiteren hab ich es einfach versucht in den Ordner zu gehen und da die Datei aufzurufen, nur wird dann nur die Erste Batch abgearbeitet und dannach is Ende, egal was da kommt.
Ordnerbsp:
H:\Ordner1\Ordner2\Ordner3\batch1
H:\Ordner4\Ordner5\Ordner6\batch2
diese sollen halt ausgeführt werden.
Ich hab mehrer Batchdateien in unterschiedlichen ordnern auf ner Festplatte und diese sollen nacheinander aufgerufen und abgerabeitet werden.
Hab es schon versucht mit "Call", aber das funktioniert nicht, da die Batchdateien in den jeweiligen Ordnern ausgeführt werden müssen und die somit an anderer Stelle nicht funktionieren.
Desweiteren hab ich es einfach versucht in den Ordner zu gehen und da die Datei aufzurufen, nur wird dann nur die Erste Batch abgearbeitet und dannach is Ende, egal was da kommt.
Ordnerbsp:
H:\Ordner1\Ordner2\Ordner3\batch1
H:\Ordner4\Ordner5\Ordner6\batch2
diese sollen halt ausgeführt werden.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 87479
Url: https://administrator.de/forum/callbatch-fuer-mehrere-andere-batchdateien-in-verschiedenen-ordnern-87479.html
Ausgedruckt am: 03.05.2025 um 19:05 Uhr
11 Kommentare
Neuester Kommentar
Hallo Bredack!
, kannst Du den Aufruf etwa so gestalten:
[Edit] ... oder etwas schlanker:
[/Edit]
Grüße
bastla
... da die Batchdateien in den jeweiligen Ordnern ausgeführt werden müssen und die somit an anderer Stelle nicht funktionieren.
Einmal abgesehen davon, dass diese Batchdateien dann vermutlich noch Optimierungspotenzial haben pushd H:\Ordner1\Ordner2\Ordner3\
call batch1
popd
...
[Edit] ... oder etwas schlanker:
pushd H:\Ordner1\Ordner2\Ordner3\ & call batch1 & popd
...
Grüße
bastla
Moin Bredack,
Unabhängig davon, ob Du die direkt oder indirekt aufrufst.
Grüße
Biber
... da die Batchdateien in den jeweiligen Ordnern ausgeführt werden müssen und die somit an anderer Stelle nicht funktionieren.
Wenn eine derartige Restriktion besteht, dann sollte jede dieser Batchdateien als zweite Zeile ein Pushd "dahinWoDieBatLiegt"und als (logisch) vorletzte Zeile ein PopD beinhalten.Unabhängig davon, ob Du die direkt oder indirekt aufrufst.
@echo off & setlocal
PushD "%~dp0"
.....
...
Popd
Grüße
Biber
Hallo Bredack!
Du hast ja schon (im angesprochenen Batch) eine Variable %path% - setz diese (oder, falls ein anderer Pfad gefragt wäre, eine weitere Variable) einfach so ein:
Eine allgemeinere Lösung kannst Du Biber's Vorschlag entnehmen ...
Noch besser wäre es aber vermutlich, nur einen Batch zu verwenden und diesen jeweils mit dem zu bearbeitenden Ordner als Parameter aufzurufen.
Vielleicht erklärst Du Dein Vorhaben noch einmal etwas genauer ...
Grüße
bastla
Du hast ja schon (im angesprochenen Batch) eine Variable %path% - setz diese (oder, falls ein anderer Pfad gefragt wäre, eine weitere Variable) einfach so ein:
for /F "delims=- tokens=1-2*" %%i in ('dir /b %path%\%Filter%') do (...
Eine allgemeinere Lösung kannst Du Biber's Vorschlag entnehmen ...
Noch besser wäre es aber vermutlich, nur einen Batch zu verwenden und diesen jeweils mit dem zu bearbeitenden Ordner als Parameter aufzurufen.
Vielleicht erklärst Du Dein Vorhaben noch einmal etwas genauer ...
Grüße
bastla
Hallo Bredack!
Eigentlich müsste dieser Alternativ-Vorschlag für die aufzurufende Batchdatei noch in Deinen vorigen Thread:
Wenn Du nicht kopieren, sondern doch verschieben willst:
In beiden Fällen wird die neueste Datei durch die umgekehrte Sortierung und das "skip=1" einfach übersprungen.
Beim Aufruf der Batchdatei ist der Quellpfad (ohne abschließenden "\", vor allem, wenn es sich um einen Root-Ordner wie etwa "H:\" handelt) zu übergeben. Falls Du den Batch als "C:\Scripts\Verschiebe.cmd" speicherst, könntest Du diesen so starten:
Der Ordner "Jahr_Monat" wird dabei immer unterhalb des Quellpfades (also im obigen Beispiel als "H:\Ordner1\Ordner2\Ordner3\2008_05") angelegt.
Zurück zum Thema dieses Threads
:
Für eine ganze Liste zu bearbeitender Ordner böte es sich an, eine entsprechende Textdatei (zB "D:\Ordnerliste.txt") mit je einem Pfad pro Zeile zu erstellen und so abzuhandeln:
Grüße
bastla
Eigentlich müsste dieser Alternativ-Vorschlag für die aufzurufende Batchdatei noch in Deinen vorigen Thread:
@echo off & setlocal
set "Pfad=%~1"
set "Filter=%Pfad%\20??_*.txt"
for /f "skip=1 tokens=1-2* delims=_" %%i in ('dir /b /o-d /a-d "%Filter%"') do xcopy "%%i_%%j_%%k" "%Pfad%\%%i_%%j\">nul
@echo off & setlocal
set "Pfad=%~1"
set "Filter=%Pfad%\20??_*.txt"
for /f "skip=1 tokens=1-2* delims=_" %%i in ('dir /b /o-d /a-d "%Filter%"') do (
if not exist "%Pfad%\%%i_%%j\" md "%Pfad%\%%i_%%j\"
move "%%i_%%j_%%k" "%Pfad%\%%i_%%j\"
)
Beim Aufruf der Batchdatei ist der Quellpfad (ohne abschließenden "\", vor allem, wenn es sich um einen Root-Ordner wie etwa "H:\" handelt) zu übergeben. Falls Du den Batch als "C:\Scripts\Verschiebe.cmd" speicherst, könntest Du diesen so starten:
C:\Scripts\Verschiebe.cmd "H:\Ordner1\Ordner2\Ordner3"
Zurück zum Thema dieses Threads
Für eine ganze Liste zu bearbeitender Ordner böte es sich an, eine entsprechende Textdatei (zB "D:\Ordnerliste.txt") mit je einem Pfad pro Zeile zu erstellen und so abzuhandeln:
@echo off & setlocal
set "Liste=D:\Ordnerliste.txt"
for /f "usebackq delims=" %%a in ("%Liste%") do call :ProcessLine "%%a"
goto :eof
:ProcessLine
set "Pfad=%~1"
set "Filter=%Pfad%\20??_*.txt"
for /f "skip=1 tokens=1-2* delims=_" %%i in ('dir /b /o-d /a-d "%Filter%"') do (
if not exist "%Pfad%\%%i_%%j\" md "%Pfad%\%%i_%%j\"
move "%%i_%%j_%%k" "%Pfad%\%%i_%%j\"
)
goto :eof
Grüße
bastla
Hallo Bredack!
Grüße
bastla
Aufrufen mit Parameterübergabe geht nicht so leicht, da die Filternamen immer anders sind...
Ließe sich lösen, indem Du Pfad samt Filter (zB "H:\Ordner1\Ordner2\Ordner3\20??_*.pdf") in die Textdatei schreibst:@echo off & setlocal
set "Liste=D:\Ordnerliste.txt"
for /f "usebackq delims=" %%a in ("%Liste%") do call :ProcessLine "%%a"
goto :eof
:ProcessLine
set "Pfad=%~dp1"
set "Filter=%~1"
for /f "skip=1 tokens=1-2* delims=_" %%i in ('dir /b /o-d /a-d "%Filter%"') do (
if not exist "%Pfad%%%i_%%j\" md "%Pfad%%%i_%%j\"
move "%%i_%%j_%%k" "%Pfad%%%i_%%j\"
)
goto :eof
... Dateinamen zu lang sind und somit ne Meldung ausgeworfen wird, kann man das irgendwie umgehen?
Ne Meldung zu umgehen ist etwas schwierig, bei einer konkreten Fehlermeldung (und der exakten Beschreibung, unter welchen Umständen / für welchen Dateinamen der Fehler auftritt) ließe sich eher etwas machen ...Grüße
bastla
Hallo Bredack!
Manchmal drücke ich mich ja wirklich missverständlich aus, daher neuer Versuch:
Was Du auch gleich noch machen könntest: Ändere das "echo off" in der ersten Zeile auf "echo on" und starte den Batch von der Kommandozeile mit Umleitung der Ausgabe in eine Textdatei, also zB mit
In der so entstandenen Textdatei kannst Du dann den Ablauf samt Fehlermeldungen nachvollziehen und so das Problem hoffentlich noch etwas eingrenzen.
Grüße
bastla
Manchmal drücke ich mich ja wirklich missverständlich aus, daher neuer Versuch:
- Wie lautet die exakte Fehlermeldung (auch aus der CMD-Shell kann man/frau Text kopieren)?
- Bei welcher Datei tritt der Fehler auf?
- Und, zur Sicherheit: Wie sieht der aktuelle Stand Deines Batches aus?
Was Du auch gleich noch machen könntest: Ändere das "echo off" in der ersten Zeile auf "echo on" und starte den Batch von der Kommandozeile mit Umleitung der Ausgabe in eine Textdatei, also zB mit
H:\Ordner1\Ordner2\Ordner3\Verschiebe.cmd>D:\Verschiebe-Log.txt 2>&1
Grüße
bastla