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

Batch Quellcode aus TXT lesen

Frage Entwicklung Batch & Shell

Mitglied: svatvn

svatvn (Level 1) - Jetzt verbinden

24.08.2012, aktualisiert 21:38 Uhr, 3694 Aufrufe, 14 Kommentare

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
Mitglied: bastla
24.08.2012 um 21:55 Uhr
Hallo svatvn!
Hoffe es ist verständlich was gemeint ist.
Nicht ganz - und ich vermute mal, dass es eine Lösung über Parameter, auch aus einer TXT-Datei geben sollte; kannst Du das mal etwas konkreter darstellen?

Grüße
bastla
Bitte warten ..
Mitglied: rubberman
24.08.2012 um 22:09 Uhr
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
01.
@type "test.txt">>"%~f0" 
02.
 
test.txt
01.
@echo off 
02.
echo Hello World! 
03.
pause 
04.
 
05.
>"%~f0" echo @type "test.txt"^>^>"%%~f0"
Die letzte Zeile der Textdatei verstzt den Batch in seinen ursprünglichen Zustand zurück.

Grüße
rubberman
Bitte warten ..
Mitglied: svatvn
25.08.2012, aktualisiert um 00:05 Uhr
Zitat von rubberman:
Warum muss die Batchdatei eigentlich lokal liegen?
Hallo rubberman,
die Batch muss jeweils den Ordnernamen herausfinden, in dem sie sich gerade befindet. Daher muss sie zwangsweise lokal dort liegen...
Ich werd aber deinen Code ausprobieren. Danke

@bastla
ich will, dass der QuellCode nicht in der Batchdatei selbst steht.
In der Batchdatei soll nur ein Verweis auf eine Text-Datei (z.B. C:\batchcode.txt) stehen, aus welcher er sich den Code holen soll.

Stell dir vor, du hast 1000 Batch-Dateien mit dem selben QuellCode. Wenn sich der QuellCode ändert, müsstest du den Inhalt von 1000 Batchdateien ändern.
Wenn jedoch alle Batch-Dateien auf die selbe Text-Datei zugreifen, musst du nur 1 mal den Inhalt einer einzigen TXT-Datei ändern und alle Batchdateien sind sofort auf dem selben Stand...
Bitte warten ..
Mitglied: bastla
25.08.2012, aktualisiert um 00:10 Uhr
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
\\Server\Freigabe\EigentlicherBatch.cmd "%~dp0"
oder lokal eben
C:\EigentlicherBatch.cmd "%~dp0"
bestehen und so dem "eigentlichen" Batch den Ordner als Parameter mitteilen ...

Grüße
bastla
Bitte warten ..
Mitglied: svatvn
25.08.2012, aktualisiert um 00:49 Uhr
Zitat von bastla:
Was macht denn der Batch so Geheimnisvolles, dass Du das nicht darstellen kannst/willst?
ich kann keine Batch posten, weil ich noch gar keine spezielle Batch habe.
Ich habe viele Batch-Code-Schnipsel, die ich immer wieder exakt in der selben Form brauche.

Jetzt kam mir die Idee, die Code-Schnipsel zentral in einem Ordner, einer Art "Datenbank" in Form von TXT-Dateien zu speichern. Dadurch können alle meine Batch-Dateien un Zukunft auf diese Datenbank zugreifen und hätten immer den aktuellsten Code.

Verstehst du jetzt was ich meine? ^^

Oder gut, meinetwegen kann es auch irgendein Code wie dieser sein:

Die Datei C:\BatchDatenbank\Ort-Anzeiger.txt hat folgenden Inhalt
01.
@echo off 
02.
 
03.
::Dieser Code zeigt den aktuellen Ort und den Ordnernamen an: 
04.
echo mein jetziger Pfad lautet %CD% 
05.
for /f "delims=\" %%a in ("%cd%") do (echo Ich befinde mich im Ordner %%~nxa)
Wie kann jetzt eine Batch-Datei (die überall irgendwo liegen kann) jetzt den Inhalt dieser Ort-Anzeiger.txt als Code übernehmen und ausführen?
Bitte warten ..
Mitglied: bastla
25.08.2012 um 00:58 Uhr
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"):
D:\Testordner>C:\BatchDatenbank\Ort-Anzeiger.cmd 
mein jetziger Pfad lautet D:\Testordner 
Ich befinde mich im Ordner Testordner 
 
D:\Testordner>
Wenn Du gesteigerten Wert darauf legst, kannst Du die eine Zeile
@C:\BatchDatenbank\Ort-Anzeiger.cmd
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
Ort-Anzeiger
aufrufen.

Grüße
bastla
Bitte warten ..
Mitglied: 60730
25.08.2012 um 01:01 Uhr
moin,

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
Bitte warten ..
Mitglied: 60730
25.08.2012, aktualisiert um 12:38 Uhr
ich hab das Ding mal rausgesucht.....


01.
:para 
02.
set "source=server\freigabe" 
03.
fc \\%source%\%~nx0 c:\script\%~nx0 >nul && goto samescript 
04.
if not exist c:\script\ md c:\script\ && copy \\%source%\%~nx0 c:\script\%~nx0 
05.
 
06.
start "machwas" /wait c:\script\%~nx0 
07.
exit 
08.
goto end 
09.
 
10.
:samescript 
11.
echo machwas 
12.
pause 
13.
 
14.
:end
@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.
Bitte warten ..
Mitglied: bastla
25.08.2012, aktualisiert um 13:21 Uhr
@T-Mo
Manchmal macht es doch Sinn, das Script lokal zu haben und dort auszuführen
Kein Einwand (gegen "Manchmal" ), aber bis ich dafür einen vernünftigen Grund von svatvn gelesen habe, halte ich mich an "allermeistens" ...

Grüße
bastla

P.S.: Deiner Zeile 8 fehlt etwas der Witz ...
Bitte warten ..
Mitglied: BOBO927
25.08.2012 um 14:55 Uhr
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
Bitte warten ..
Mitglied: bastla
25.08.2012, aktualisiert um 15:10 Uhr
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
call "c:\datenbank\deinebatch.bat" .
oder einfach, wie oben schon gezeigt
call "c:\datenbank\deinebatch.bat"
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 "call" erforderlich ist, ergibt sich natürlich aus dem Rest (so es einen solchen gibt) des aufrufenden Batches ...

Grüße
bastla
Bitte warten ..
Mitglied: Leopold.Bloom
29.08.2012 um 06:28 Uhr
Hallo svatvn

Müssen es unbedingt Text Files sein? Ich habe mir für solche Zwecke eine lib.cmd geschrieben.

01.
 
02.
@echo off 
03.
 
04.
set TARGET=%1 
05.
set PARAMS= 
06.
 
07.
Rem Für den Fall, dass man ein paar Parameter mehr hat 
08.
Rem ansonsten ist bei %9 Schluss 
09.
Rem In der Theorie eine beliebig lange Parameterliste 
10.
Rem könnte sein, dass es ab 256 Zeichen Probleme gibt. 
11.
Ram Habe ich noch nicht ausprobiert 
12.
 
13.
:get_param 
14.
	shift 
15.
	set PARAMS=%PARAMS% %1 
16.
if not "%1"=="" goto get_param 
17.
call :%TARGET% %PARAMS% 
18.
 
19.
goto :eof 
20.
 
21.
:pfad 
22.
echo mein jetziger Pfad lautet %CD%  
23.
for /f "delims=\" %%a in ("%cd%") do (echo Ich befinde mich im Ordner %%~nxa) 
24.
goto :eof 
25.
 
26.
:beispiel 
27.
 
28.
set V1=%1 
29.
set V2=%2 
30.
set V3=%3 
31.
set V4=%4 
32.
set V5=%5 
33.
set V6=%6 
34.
set V7=%7 
35.
set V8=%8 
36.
set V9=%9 
37.
shift 
38.
set V10=%9 
39.
shift 
40.
set V11=%9 
41.
 
42.
ECHO V1=%V1% V2=%V2% V3=%V3% V4=%V4% V5=%V5% V6=%V6% V7=%V7% V8=%V8% V9=%V9% V10=%V10% V11=%V11%  
43.
ECHO Es wurden 11 Parameter übergeben 
44.
goto :eof 
45.
 
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.

01.
 
02.
call lib beispiel 1 2 3 4 5 6 7 8 9 10 11 
03.
call lib pfad 
04.
 
Wenn lib.cmd nicht im lokalen Directory liegt sondern zentral z.B.auf
e:\mylibs

01.
 
02.
call e:\mylibs\lib beispiel 1 2 3 4 5 6 7 8 9 10 11 
03.
call e:\mylibs\lib pfad 
04.
 
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
Bitte warten ..
Mitglied: Leopold.Bloom
29.08.2012 um 07:49 Uhr
Es geht auch sowas

01.
 
02.
set "$=call y:\TOSHIBA-USB3-5--HDD-01\LIB\lib23" 
03.
set "$$=call lib" 
04.
 
05.
%$%  gettime 
06.
%$$% pfad  
07.
%$$% beispiel 1 2 3 4 5 6 7 8 9 10 11 
08.
 
Ich finde, das räumt den Code auf. Auch hier der Vorteil - wenn sich der Pfad für eine lib ändert habe ich nur eine Stelle zu ändern für alle Aufrufe.

LG

Leo
Bitte warten ..
Mitglied: Biber
03.09.2012, aktualisiert um 16:38 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(3)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Mittels Batch alle .txt Dateien eines Verzeichnises ändern (10)

Frage von mttspeedy zum Thema Batch & Shell ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Batch & Shell
CMD-Batch hilfe: Dateiname zu txt (2)

Frage von Syscore64 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...