PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Batch: Inhalt von einer anderen Batch (Anzahl Unbekannt und Veränderbar) einlesen.


T'hul-Nok Razna
2008-08-01, 10:21:38
Wie ist es machbar in einer Batch es so zu bewerkstelligen, das die Batch mir aus einer anderen Batch den Inhalt ausführt?
Im Prinzip gehts ja über den "CALL" Befehl. Nur mein Problem liegt darin, das ich die Anzahl der Batch Dateien nicht kenne, bzw die Anzahl der Dateien sich immer wieder ändert/ändern kann.

Soll so sich abspielen:

Heute:
Hauptbatch.bat
--> call ..\Scripts\AXZ.bat
--> call ..\Scripts\HZT.bat
--> call.. \Scripts\ZIZ.bat

Morgen:
Hauptbatch.bat
--> call ..\Scripts\5Z9.bat
--> call ..\Scripts\HZT.bat
--> call.. \Scripts\TE3.bat
--> call ..\Scripts\TOI.bat

Irgendwann:
Hauptbatch.bat
--> call ..\Scripts\5Z9.bat
--> call ..\Scripts\AZX.bat

Wie ersichtlich ist, der Ordner wo die Batchdateien abgelegt werden ist der gleiche, nur Name und Anzahl ist leider Variabel.
Da liegt nun auch mein Problem.....

-------------------------------------------------------------

Bevor ich nun einen 2. Thread öffne, quetsch ich das schnell hier rein:
Ist es in einer Batch machbar aus einer Datei nicht nur den Inhalt zu lesen (per "<" halt...), sondern auch darin zu springen? Das selbige dann bei der Ausgabe.
Ergo:

Lese Inhalt Aus Zeile 5 und 6 (was auch immer gewollt ist)
oder
Lese Inhalt zwischen :...INFORMATION... und :...INFORMATION_2...

Überschreibe den Inhalt in Zeile 5 und 6 (was auch immer gewollt ist)
oder
Überschreibe den Inhalt zwischen :...INFORMATION... und :...INFORMATION_2...

elianda
2008-08-01, 13:26:45
Ich vermute mal, dass Du Dich mit Batch auf MS-DOS 7.00 oder frueher beziehst, sonst wuerdest du den WSH verwenden.

Probier doch mal im Prinzip folgendes:
den call aufruf mit einer for schleife realisieren
for %%1 in (*.bat) do call %%1

Das pickt dir zumindest immer die erste *.bat Datei.
Um zu verhindern, dass die gleiche bat spaeter nochmal aufgerufen wird, benenne Sie einfach um.

Was ueberschreiben von Dateien oder ersetzen angeht, schaue die mal edlin an, der ist komplett fernsteuerbar. Ggf. kann man weitere Sachen auch mit sort und debug realisieren.
Wobei fuer viele Dinge ein paar Zeilen Code in z.B. Turbo Pascal innerhalb von 5mins das gleiche leisten koennen.
Gerade fuer Ersetzen in Files gibt es aber auch sehr ausgefeilte Tools, wie Gobbelcopy von P.Wolf z.B.

Mr. Lolman
2008-08-01, 13:26:55
1.


for /f "tokens=1" %%j IN ('dir /b *.bat') DO call %%j



EDIT: Viel zu viel unnützer Code. So wies elianda geschrieben hat, gehts auch:
for %%1 in (*.bat) do call %%1


2.
@echo off
if "%1%" NEQ "mitv" (
cmd /v /c batchfile.bat mitv
exit
)
find /n /v "" Dateiname >1
for /l %%x IN (1,1,10) DO (
set counter=%%x
for /f "tokens=2 delims=]" %%j IN ('find "[!counter!]" 1') DO (
set name=%%j
echo !name!
)
)
del 1


Zur Erklärung:

x) Mit der if-Abfrage wird die verzögerte Variablenerweiterung gestartet (sonst wärs nochkomplizierter). Statt 'batchfile.bat' muss man natürlich den Namen der .bat Datei verwenden.

x) mit dem 1. find Befehl wird eine Datei erstellt, wo jeder Zeile mit einer eckigen Klammer durchnummeriert ist. Natürlich muss man auch da "Dateiname", durch den Namen der zu durchsuchenden Datei ersetzen.

x) Die 1. for-Schleife gibt den Wertebereich an. IdF von 1, mit einer Schrittweite von 1, bis 10.

x) In der 2. for-Schleife wird der Dateiinhalt in ebendiesem Wertebereich in eine Variable geschrieben, deren Inhalt dann auch mit echo gleich ausgegeben wird. Dabei wird ']' als Trennzeichen genutzt. Gibts in der zu durchsuchenden Datei schliessende eckige Klammen, müsste man das auch noch berücksichtigen - d.h. ein anderes Trennzeichen verwenden und die Zeilennummerierungen mit einer manuellen Variablenerweiterung (mittels set-Befehl) rauslöschen.

x) direkt in einer Datei Zeichen zu ändern geht mWn mit Batch nicht, man muss die Datei mit den geänderten Werten also neu erstellen.

T'hul-Nok Razna
2008-08-02, 03:03:51
Vielen Dank erst einmal, werd mal das Hirn einschalten und versuchen damit das Problem zu lösen :)