Batch Quellcode aus TXT lesen
Hallo Leute,
meine Batchdatei soll eine Text-Datei (code.txt) auslesen und dessen Inhalt "übernehmen"
und als normalen Batch-Code ausführen.
Der Inhalt der ganzen Batchdatei soll also auf eine zentrale TXT-Datei zugreifen.
Hintergrund ist, dass ich eine bestimmte Batchdatei an mehreren Orten ausführen muss.
Momentan muss ich jedes mal, sobald sich der Code dieser Batch ändert, an allen anderen Orten kopieren, also "verteilen"
Nun sollen alle Batch-Dateien auf diese selbe TXT-Datei zurückgreifen und so immer den gleichen Code haben.
Hoffe es ist verständlich was gemeint ist.
Danke
meine Batchdatei soll eine Text-Datei (code.txt) auslesen und dessen Inhalt "übernehmen"
und als normalen Batch-Code ausführen.
Der Inhalt der ganzen Batchdatei soll also auf eine zentrale TXT-Datei zugreifen.
Hintergrund ist, dass ich eine bestimmte Batchdatei an mehreren Orten ausführen muss.
Momentan muss ich jedes mal, sobald sich der Code dieser Batch ändert, an allen anderen Orten kopieren, also "verteilen"
Nun sollen alle Batch-Dateien auf diese selbe TXT-Datei zurückgreifen und so immer den gleichen Code haben.
Hoffe es ist verständlich was gemeint ist.
Danke
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 190184
Url: https://administrator.de/contentid/190184
Ausgedruckt am: 05.11.2024 um 17:11 Uhr
14 Kommentare
Neuester Kommentar
Hallo svatvn und bastla!
Warum muss die Batchdatei eigentlich lokal liegen? Es können durchaus mehrere User gleichzeitig auf eine remote platzierte Batchdatei zugreifen.
Wie auch immer - teste mal folgendes:
test.bat
test.txt
Die letzte Zeile der Textdatei verstzt den Batch in seinen ursprünglichen Zustand zurück.
Grüße
rubberman
Warum muss die Batchdatei eigentlich lokal liegen? Es können durchaus mehrere User gleichzeitig auf eine remote platzierte Batchdatei zugreifen.
Wie auch immer - teste mal folgendes:
test.bat
@type "test.txt">>"%~f0"
test.txt
@echo off
echo Hello World!
pause
>"%~f0" echo @type "test.txt"^>^>"%%~f0"
Grüße
rubberman
Hallo svatvn!
Was macht denn der Batch so Geheimnisvolles, dass Du das nicht darstellen kannst/willst?
Anyhow: Wenn Du wirklich in jedem Ordner einen Batch platzierst, um den Ordnernamen herauszufinden, kann dieser immer noch einfach aus der Zeile
oder lokal eben
bestehen und so dem "eigentlichen" Batch den Ordner als Parameter mitteilen ...
Grüße
bastla
Was macht denn der Batch so Geheimnisvolles, dass Du das nicht darstellen kannst/willst?
Anyhow: Wenn Du wirklich in jedem Ordner einen Batch platzierst, um den Ordnernamen herauszufinden, kann dieser immer noch einfach aus der Zeile
\\Server\Freigabe\EigentlicherBatch.cmd "%~dp0"
C:\EigentlicherBatch.cmd "%~dp0"
Grüße
bastla
Hallo svatvn!
Wie soll denn die aufrufende Batch-Datei gestartet werden?
Das gepostete Beispiel würde zB 1:1 als Batch in C:\BatchDatenbank abgelegt funktionieren - Demo von der Kommandozeile (aus dem Ordner "D:\Testordner"):
Wenn Du gesteigerten Wert darauf legst, kannst Du die eine Zeile
natürlich auch in einen eigenen Batch schreiben ...
Noch einfacher wird's, wenn Du "C:\BatchDatenbank" der Variablen "%Path%" hinzufügst - dann musst Du noch nicht mal den Pfad angeben, sondern kannst den Batch einfach mit
aufrufen.
Grüße
bastla
Wie soll denn die aufrufende Batch-Datei gestartet werden?
Das gepostete Beispiel würde zB 1:1 als Batch in C:\BatchDatenbank abgelegt funktionieren - Demo von der Kommandozeile (aus dem Ordner "D:\Testordner"):
D:\Testordner>C:\BatchDatenbank\Ort-Anzeiger.cmd
mein jetziger Pfad lautet D:\Testordner
Ich befinde mich im Ordner Testordner
D:\Testordner>
@C:\BatchDatenbank\Ort-Anzeiger.cmd
Noch einfacher wird's, wenn Du "C:\BatchDatenbank" der Variablen "%Path%" hinzufügst - dann musst Du noch nicht mal den Pfad angeben, sondern kannst den Batch einfach mit
Ort-Anzeiger
Grüße
bastla
moin,
zuerst vergleicht sich die batch selber mit einer, die auf einer freigabe liegt und genauso heisst - kommt ein ok gehts banal weiter, kommt kein ok - gehts in ne unterfunktion, die die Datei vom Server lokal kopiert und die dann startet und ab ins ende der Batch, damit beendet die sich automatisch.
Aber das macht natürlich nur Sinn bei vollständigen Tieren, nicht bei schnippseln...
N8
Ich habe viele Batch-Code-Schnipsel, die ich immer wieder exakt in der selben Form brauche.
- also ich mach das ganz einfach....
zuerst vergleicht sich die batch selber mit einer, die auf einer freigabe liegt und genauso heisst - kommt ein ok gehts banal weiter, kommt kein ok - gehts in ne unterfunktion, die die Datei vom Server lokal kopiert und die dann startet und ab ins ende der Batch, damit beendet die sich automatisch.
Aber das macht natürlich nur Sinn bei vollständigen Tieren, nicht bei schnippseln...
N8
ich hab das Ding mal rausgesucht.....
@bastla:
Manchmal macht es doch Sinn, das Script lokal zu haben und dort auszuführen, das obere antonymisierte und stark gekürzte Teil ist u.a für das Snapshotten im Einsatz, das Tool (vom Tom Ehlert) mags nicht, wenn schon ein handle auf die Fraigabe besteht und offen ist, auf den gesichert wird und ich mag das trennen zwischen - auf dem Server ist das Script und auf nem anderen liegt das "Backup" drauf nicht so gerne, denn im Zweifel brauch ich so nur eine quelle.
@ot
Ich hab das Ding da oben sehr stark verkürzt und gebe keine Garantie, dass ich nicht was wichtiges wegrationalisiert hab.
Es ist Samstag über 25° und gefühlte 80% Luftfeuchte die Frisur sitzt, aber die Server müssen grade alle umziehen.
:para
set "source=server\freigabe"
fc \\%source%\%~nx0 c:\script\%~nx0 >nul && goto samescript
if not exist c:\script\ md c:\script\ && copy \\%source%\%~nx0 c:\script\%~nx0
start "machwas" /wait c:\script\%~nx0
exit
goto end
:samescript
echo machwas
pause
:end
Manchmal macht es doch Sinn, das Script lokal zu haben und dort auszuführen, das obere antonymisierte und stark gekürzte Teil ist u.a für das Snapshotten im Einsatz, das Tool (vom Tom Ehlert) mags nicht, wenn schon ein handle auf die Fraigabe besteht und offen ist, auf den gesichert wird und ich mag das trennen zwischen - auf dem Server ist das Script und auf nem anderen liegt das "Backup" drauf nicht so gerne, denn im Zweifel brauch ich so nur eine quelle.
@ot
Ich hab das Ding da oben sehr stark verkürzt und gebe keine Garantie, dass ich nicht was wichtiges wegrationalisiert hab.
Es ist Samstag über 25° und gefühlte 80% Luftfeuchte die Frisur sitzt, aber die Server müssen grade alle umziehen.
Moin erstmal
kann man die nicht per call aufrufen und den aktuellen Pfad übergeben ?
ungefähr so:
call "c:\datenbank\deinebatch.bat" "%cd%"
Gruß Bobo
kann man die nicht per call aufrufen und den aktuellen Pfad übergeben ?
ungefähr so:
call "c:\datenbank\deinebatch.bat" "%cd%"
Gruß Bobo
Hallo BOBO927!
Natürlich kann man (darum geht es ja eigentlich die ganze Zeit schon ) - und wenn der aktuelle Ordner als Parameter übergeben werden soll, genügt auch
oder einfach, wie oben schon gezeigt
da sich ja der aktuelle Ordner durch den Batchaufruf nicht ändert und daher im aufgerufenen Batch weiterhin als "%cd%" zur Verfügung steht; ob übrigens "
Grüße
bastla
Natürlich kann man (darum geht es ja eigentlich die ganze Zeit schon ) - und wenn der aktuelle Ordner als Parameter übergeben werden soll, genügt auch
call "c:\datenbank\deinebatch.bat" .
call "c:\datenbank\deinebatch.bat"
call
" erforderlich ist, ergibt sich natürlich aus dem Rest (so es einen solchen gibt) des aufrufenden Batches ...Grüße
bastla
Hallo svatvn
Müssen es unbedingt Text Files sein? Ich habe mir für solche Zwecke eine lib.cmd geschrieben.
Damit kann ich einzelne Funktionen aufrufen. Somit brauche ich nicht für jeden Schnipsel eine eigene bat oder cmd Im Aufrufbatch heißt es dann.
Wenn lib.cmd nicht im lokalen Directory liegt sondern zentral z.B.auf
e:\mylibs
Der aufgerufene Code läuft immer lokal. Es ist egal wo die lib liegt. Es funktioniert mit gemappten Netzlaufwerken und auch mit gemappten Webdav LW. Die lib kann in einer Cloud liegen, wenn diese gemappt ist. Allerdings geht dann die Performance vielleicht in die Knie.
Damit habe ich eine Art Library für Funktionen. Ich brauche das dafür, dass ich nicht jede Funktion in jedem Batch haben muss. Die oft genutzten Funktionen werden ausgelagert. Ich will Übersicht in meinen Batches und nicht soviel suchen. Wenn ich irgendwas irgendo schon mal verwendet habe, finde ich es nicht. Nützliche Funktionen kommen in die lib.cmd dann brauche ich sie nicht neu zu schreiben. Und falls mal eine Funktion geändert werden muss, brauche ich es auch nur an einer Stelle zu tun.
So ein Aufruf geht natürlich auch mit einer ganzen Batch. Das einzige Problem ist - was machst Du, wenn Du den Aufbewahrort für Deine libs änderst? Das Problem hättest Du bei Deinem Konzept aber auch.
LG aus HH
Leo
Müssen es unbedingt Text Files sein? Ich habe mir für solche Zwecke eine lib.cmd geschrieben.
@echo off
set TARGET=%1
set PARAMS=
Rem Für den Fall, dass man ein paar Parameter mehr hat
Rem ansonsten ist bei %9 Schluss
Rem In der Theorie eine beliebig lange Parameterliste
Rem könnte sein, dass es ab 256 Zeichen Probleme gibt.
Ram Habe ich noch nicht ausprobiert
:get_param
shift
set PARAMS=%PARAMS% %1
if not "%1"=="" goto get_param
call :%TARGET% %PARAMS%
goto :eof
:pfad
echo mein jetziger Pfad lautet %CD%
for /f "delims=\" %%a in ("%cd%") do (echo Ich befinde mich im Ordner %%~nxa)
goto :eof
:beispiel
set V1=%1
set V2=%2
set V3=%3
set V4=%4
set V5=%5
set V6=%6
set V7=%7
set V8=%8
set V9=%9
shift
set V10=%9
shift
set V11=%9
ECHO V1=%V1% V2=%V2% V3=%V3% V4=%V4% V5=%V5% V6=%V6% V7=%V7% V8=%V8% V9=%V9% V10=%V10% V11=%V11%
ECHO Es wurden 11 Parameter übergeben
goto :eof
Damit kann ich einzelne Funktionen aufrufen. Somit brauche ich nicht für jeden Schnipsel eine eigene bat oder cmd Im Aufrufbatch heißt es dann.
call lib beispiel 1 2 3 4 5 6 7 8 9 10 11
call lib pfad
Wenn lib.cmd nicht im lokalen Directory liegt sondern zentral z.B.auf
e:\mylibs
call e:\mylibs\lib beispiel 1 2 3 4 5 6 7 8 9 10 11
call e:\mylibs\lib pfad
Der aufgerufene Code läuft immer lokal. Es ist egal wo die lib liegt. Es funktioniert mit gemappten Netzlaufwerken und auch mit gemappten Webdav LW. Die lib kann in einer Cloud liegen, wenn diese gemappt ist. Allerdings geht dann die Performance vielleicht in die Knie.
Damit habe ich eine Art Library für Funktionen. Ich brauche das dafür, dass ich nicht jede Funktion in jedem Batch haben muss. Die oft genutzten Funktionen werden ausgelagert. Ich will Übersicht in meinen Batches und nicht soviel suchen. Wenn ich irgendwas irgendo schon mal verwendet habe, finde ich es nicht. Nützliche Funktionen kommen in die lib.cmd dann brauche ich sie nicht neu zu schreiben. Und falls mal eine Funktion geändert werden muss, brauche ich es auch nur an einer Stelle zu tun.
So ein Aufruf geht natürlich auch mit einer ganzen Batch. Das einzige Problem ist - was machst Du, wenn Du den Aufbewahrort für Deine libs änderst? Das Problem hättest Du bei Deinem Konzept aber auch.
LG aus HH
Leo
Moin svatvn,
öhhmmm.... wassn hier jezz' Status der Frage?
Seid ihr noch bei der Frageklärung, der Theorem-Formulierung für das Wintersemester 2012/2013 oder ist die Frage schon beantwortet, was ja durchaus an mir vorbeigerauscht sein könnte?
Gib doch mal bitte Zeichen, ob "Erledigt" oder "Um interessante Folgeprobleme bereichert" oder "Das nächste Mal frag' ich lieber meinen Friseur" oder was ist der Stand?
Grüße
Biber
öhhmmm.... wassn hier jezz' Status der Frage?
Seid ihr noch bei der Frageklärung, der Theorem-Formulierung für das Wintersemester 2012/2013 oder ist die Frage schon beantwortet, was ja durchaus an mir vorbeigerauscht sein könnte?
Gib doch mal bitte Zeichen, ob "Erledigt" oder "Um interessante Folgeprobleme bereichert" oder "Das nächste Mal frag' ich lieber meinen Friseur" oder was ist der Stand?
Grüße
Biber