Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Callbatch für mehrere andere Batchdateien in verschiedenen Ordnern

Frage Entwicklung Batch & Shell

Mitglied: Bredack

Bredack (Level 1) - Jetzt verbinden

13.05.2008, aktualisiert 14.05.2008, 3262 Aufrufe, 11 Kommentare

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.
Mitglied: bastla
13.05.2008 um 12:09 Uhr
Hallo Bredack!

... 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 , kannst Du den Aufruf etwa so gestalten:
01.
pushd H:\Ordner1\Ordner2\Ordner3\ 
02.
call batch1 
03.
popd 
04.
...
[Edit] ... oder etwas schlanker:
01.
pushd H:\Ordner1\Ordner2\Ordner3\ & call batch1 & popd 
02.
...
[/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: Bredack
13.05.2008 um 12:17 Uhr
Auf jeden fall haben die Dateien noch optimierungspotential :D

vlt kannst mir auch nen tip geben zum Optimieren, denke ma es liegt an der Lokalabhängigkeit an der Zeile:
01.
for /F "delims=- tokens=1-2*" %%i in ('dir /b %Filter%') do (...
(dürfte dir bekannt vorkommen ;))
Denke mal, dass es an dem 'dir' liegt, aber wie kann ich da denn genau den Pfad angeben, wo "gesucht" werden soll, mit den dazugehörigen Parametern?

Ansonsten funktioniert das mit dem Call perfekt, danke bastla

Mit freundlichen Grüßen Bredack
Bitte warten ..
Mitglied: Biber
13.05.2008 um 12:18 Uhr
Moin Bredack,

... 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.
01.
@echo off  & setlocal 
02.
PushD "%~dp0" 
03.
..... 
04.
 
05.
... 
06.
Popd
Grüße
Biber
Bitte warten ..
Mitglied: bastla
13.05.2008 um 12:24 Uhr
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:
01.
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
Bitte warten ..
Mitglied: Bredack
13.05.2008 um 12:35 Uhr
Zu meinem Vorhaben nochmal genauer:
Eigentlich war die Aufgabe nur so, dass ich aus einem Ordner Dateien nach Datum auslese und diese halt mit dem Dateinamen "2006_12_23_bla.pdf" in einen Ordner packe, den ich erstelle mit "2006_12" beispielsweise. Hat auch alles recht gut geklappt, bis ich halt erfahren hab, dass es mehrer Ordner sind, auf die das angewendet werden sollte und ich aber beim 1. Batch halt nur in dem eigentlichen Ordner gearbeitet hab. Somit hab ich halt die Dateien verteilt und an die Ordner angepasst.

Aber der Vorschlag von Biber klingt einfacher und Plausibler :D
Werd ich mal testen, ob das die Sache einfacher macht.
Auch der VOrschlag von Bastla is nen Test wert ;)

Mit freundlichen Grüßen Bredack

Edit:

Huch, nebenbei bin ich auf was "lustiges" gestoßen, es gibt da nen Ordner mit Umlauten, zb "Überschuss"
Auf den kann ich aber nicht zugreifen, weil das "Ü" nicht erkannt wird und somit der Pfad ungültig ist, gibt es da zufällig auch ne kleine Problemlösung?

Edit Edit:
la la la :D
Man kann natürlich mit den Umlauten auf die Nase fallen, wenn man den ANSI Zeichensatz nimmt, aber DOS den ASCII Zeichensatz will, somit funktioniert das jetzt
Mit freundlichen Grüßen Bredack
Bitte warten ..
Mitglied: bastla
13.05.2008 um 18:09 Uhr
Hallo Bredack!

Eigentlich müsste dieser Alternativ-Vorschlag für die aufzurufende Batchdatei noch in Deinen vorigen Thread:
01.
@echo off & setlocal 
02.
set "Pfad=%~1" 
03.
set "Filter=%Pfad%\20??_*.txt" 
04.
 
05.
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
Wenn Du nicht kopieren, sondern doch verschieben willst:
01.
@echo off & setlocal 
02.
set "Pfad=%~1" 
03.
set "Filter=%Pfad%\20??_*.txt" 
04.
 
05.
for /f "skip=1 tokens=1-2* delims=_" %%i in ('dir /b /o-d /a-d "%Filter%"') do ( 
06.
    if not exist "%Pfad%\%%i_%%j\" md "%Pfad%\%%i_%%j\" 
07.
    move "%%i_%%j_%%k" "%Pfad%\%%i_%%j\" 
08.
)
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:
01.
C:\Scripts\Verschiebe.cmd "H:\Ordner1\Ordner2\Ordner3"
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:
01.
@echo off & setlocal 
02.
set "Liste=D:\Ordnerliste.txt" 
03.
 
04.
for /f "usebackq delims=" %%a in ("%Liste%") do call :ProcessLine "%%a" 
05.
goto :eof 
06.
 
07.
:ProcessLine 
08.
set "Pfad=%~1" 
09.
set "Filter=%Pfad%\20??_*.txt" 
10.
 
11.
for /f "skip=1 tokens=1-2* delims=_" %%i in ('dir /b /o-d /a-d "%Filter%"') do ( 
12.
    if not exist "%Pfad%\%%i_%%j\" md "%Pfad%\%%i_%%j\" 
13.
    move "%%i_%%j_%%k" "%Pfad%\%%i_%%j\" 
14.
15.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: Bredack
14.05.2008 um 09:01 Uhr
Eigentlich klappt alles soweit ganz gut, hab halt die Lösung von Biber genommen.
Aufrufen mit Parameterübergabe geht nicht so leicht, da die Filternamen immer anders sind...
Warum kann man nich Dateinamen in Verschiedenen Ordnern einfach einheitlich machen, aber naja, kann ich nix ändern und so gehts ja schon recht gut.

Nur hat sich jetzt ein neues Problem gezeigt, nämlich, dass teilweise die Dateinamen zu lang sind und somit ne Meldung ausgeworfen wird, kann man das irgendwie umgehen?
Wie gesagt, an den Ordnern und Dateinamen kann ich nix ändern
Danke für die Hilfe bisher

Mit freundlichen Grüßen Bredack
Bitte warten ..
Mitglied: bastla
14.05.2008 um 12:26 Uhr
Hallo Bredack!

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:
01.
@echo off & setlocal 
02.
set "Liste=D:\Ordnerliste.txt" 
03.
 
04.
for /f "usebackq delims=" %%a in ("%Liste%") do call :ProcessLine "%%a" 
05.
goto :eof 
06.
 
07.
:ProcessLine 
08.
set "Pfad=%~dp1" 
09.
set "Filter=%~1" 
10.
 
11.
for /f "skip=1 tokens=1-2* delims=_" %%i in ('dir /b /o-d /a-d "%Filter%"') do ( 
12.
    if not exist "%Pfad%%%i_%%j\" md "%Pfad%%%i_%%j\" 
13.
    move "%%i_%%j_%%k" "%Pfad%%%i_%%j\" 
14.
15.
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
Bitte warten ..
Mitglied: Bredack
14.05.2008 um 14:03 Uhr
> ... 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


Ja ne, es kommt halt die Meldung, dass entweder der Dateiname oder die Erweiterung zu lang ist.
Und meinte halt, dass man das umgehn kann, dass trotzdem die langen Dateinamen genommen werden, bzw vearbeitet werden können. (Somit würde ja auch die Fehlermeldung verschwinden)
Möchte ja halt nur lange Dateinamen (notgedrungen) benutzen^^

Mit freundlichen Grüßen Bredack
Bitte warten ..
Mitglied: bastla
14.05.2008 um 14:20 Uhr
Hallo Bredack!

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
01.
H:\Ordner1\Ordner2\Ordner3\Verschiebe.cmd>D:\Verschiebe-Log.txt 2>&1
In der so entstandenen Textdatei kannst Du dann den Ablauf samt Fehlermeldungen nachvollziehen und so das Problem hoffentlich noch etwas eingrenzen.

Grüße
bastla
Bitte warten ..
Mitglied: Bredack
14.05.2008 um 14:33 Uhr
Hiho

Der aktuelle Stand der Batch ist so, dass ich mit der Callbatch die einzelnen Batches in den Ordner nacheinander aufrufe, was auch super klappt.
Aber sobald die Dateinamen etwas länger sind zb: "Yield_nurZK_Detail_2008-02-18-05-58-29" kommt die Fehlermeldung: "Der Dateiname oder die Erweiterung ist zu lang." wenn ich die Dateien in die gewünschten und vorher erstellten Ordner verschieben möchte.
Die Option, dass die Batches mit Parametern aufgerufen werden hab ich erstmal noch nicht implementiert (sry bastla ) , da ich wieder andere Dinge machen muss -.-
Aber feintuning werd ich auf jeden fall noch demnächst betreiben mit euren Vorschlägen.

Und Sry, drücke mich auch manchmal nen bissel missverständlich aus
Mit freundlichen Grüßen Bredack
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
VB for Applications
gelöst Mehrere CSV Dateien aus verschiedenen Ordner einlesen via VBA (12)

Frage von mtufangil zum Thema VB for Applications ...

Netzwerke
gelöst Zugriff auf Server von verschiedenen VLANs aus (7)

Frage von Kroeger02 zum Thema Netzwerke ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (22)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (19)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...