hipfzwirgel
Goto Top

BATCH-Script

Hallo Batch-Profis,

ich habe ein Batch-Script geschrieben mit welchem ich einen Treiber unattended installieren kann. Dazu benötige ich 5 Angaben wie Inst-Datei, Pfad der Inst datei,
Rechnername, etc. auf dem der Treiber installiert werden soll. Wenn ich diese 5 Angaben per SET /p Var... fest vorgebe funktioniert das alles perfekt.

Ich möchte jetzt aber die 5 Angaben in eine Text-Datei auslagern, damit ich die Batch-Datei universell für unterschiedliche Treiber und für die immer gleichen Testrechner benützen kann.

Die Text-Datei mit For/ F auslesen ist kein Problem. Aber ich finde keinen Weg die 5 Angaben der Textdatei(Zeilenweise Auflistung!) in 5 Variablen(dynamisch erzeugt) zu schreiben,
damit ich aus den 5 Variablen die notwendigen Befehle für Xcopy und psexec erstellen kann

Beispieldatensatz:

Rechnername
Setup.exe
Pfad zur Inst-datei
String mit unattended-Schaltern z.B. -s -b -overwrite
Name Zielordner

Kann mir jemand erklären wie ich dynamisch erzeugte Variablen erstellen kann innerhalb einer For /F-Scheife?

Content-ID: 432651

Url: https://administrator.de/contentid/432651

Ausgedruckt am: 22.11.2024 um 07:11 Uhr

laster
laster 25.03.2019 um 15:09:55 Uhr
Goto Top
hallo,

Du könntest alle Daten in eine Zeile schreiben und die Felder mit ';' trennen.
@echo off
for /F "usebackq tokens=1-5 Delims=;" %%i IN (x.txt) do call :PROC1 %%i %%j %%k %%l %%m  
goto ENDE

:PROC1
echo %1
echo %2
echo %3
echo %4
echo %5

goto :EOF
:ENDE

vG
LS
laster
laster 25.03.2019 um 15:10:54 Uhr
Goto Top
ok, hab gerade gelesen "zeilenweise" - zwingend ??
hipfzwirgel
hipfzwirgel 25.03.2019 aktualisiert um 15:23:41 Uhr
Goto Top
Hallo laster

zeilenweise ist nicht unbedingt zwingend. in erster Linie geht es mir darum zu sehen ob und wie man dynamische Variablen zur Laufzeit der For /f-Schleife erzeugen kann.

Gibt es denn i-eine Zähl-Variable oder so etwas, was man wie bei einer normalen For-Schleife(for i = 1...) nutzen kann?
138810
Lösung 138810 25.03.2019 aktualisiert um 15:50:25 Uhr
Goto Top
Hier ein paar Varianten:

back-to-topVariante 1


Textdatei:
var1=Rechnername
var2=Setup.exe
var3Pfad zur Inst-datei
var4=String mit unattended-Schaltern z.B. -s -b -overwrite
var5=Name Zielordner
Batch
@echo off
for /f "usebackq delims=" %%a in ("C:\datei.txt") do set "%%a"  
echo %var1%
echo %var2%
echo %var3%
echo %var4%
echo %var5%

back-to-topVariante 2

Aber warum eine extra Textdatei, übergebe die Parameter doch einfach auf der Kommandozeile
batch.cmd "Param1" "Param2" "Param3"
und in der Batch dann
echo %1
echo %2
echo %3
usw.

back-to-topVariante 3

Noch eine weitere Variante bei der Variablen mit aufsteigender Zahl und einem festen Teil generiert werden:

Die Textdatei bleibt wie deine Ursprüngliche Datei und dann nutzt du folgende Batch
@echo off
for /f "tokens=1,* delims=:" %%a in ('findstr /n "^" "c:\test.txt"') do set "var%%a=%%b"  
echo %var1%
echo %var2%
echo %var3%
:: usw
laster
laster 25.03.2019 um 15:29:41 Uhr
Goto Top
for /L %%i IN (1, 1, 10) do echo %%i
1
2
3
4
5
6
7
8
9
10
hipfzwirgel
hipfzwirgel 25.03.2019 um 15:48:05 Uhr
Goto Top
Hallo freesolo,

zunächst danke an alle für die Denkanstöße.

"Warum in eine Textdatei..."

damit ich die Installations-Parameter nur einmal zentral eingeben muss und das Script beim mehrfachen ausführen
sich die Klamotten einliest und den Treiber installiert. Das Script kommt auf unterschiedlichen Testrechner zum Einsatz und soll dort immer den gleichen Treiber installieren. Es handelt sich um einen Installationstest ob die Inst fehlerfrei auf unseren Testsystemen durch läuft, bevor er für SCCM paketiert werden soll. Zuerst hatte ich mit set /p die parameter abgefragt aber das ging mir auf den Geist, jedes mal die gleichen Angaben reinzuhacken face-smile

@ laster:

das wäre eine "normale" For schleife mit Startparameter, Laufweite, Ende, etc. Damit kann ich aber keine Liste einlesen oder?
138810
138810 25.03.2019 aktualisiert um 15:52:28 Uhr
Goto Top
damit ich die Installations-Parameter nur einmal zentral eingeben muss und das Script beim mehrfachen ausführen
sich die Klamotten einliest und den Treiber installiert.
Hätte man ja dann einfach im Parameteraufruf mitgeben können, spart man sich eine Ebene face-wink.

Naja Varianten hast du ja jetzt von uns genügend oben.

Wenns das dann war Wie kann ich einen Beitrag als gelöst markieren? nicht vergessen.
laster
laster 25.03.2019 um 16:09:59 Uhr
Goto Top
Liste einlesen: siehe Variante 1 von freesolo oder ganz oben meine 1. Antwort.
vG
LS
hipfzwirgel
hipfzwirgel 25.03.2019 um 16:19:13 Uhr
Goto Top
Hallo freesolo,

ich habe die Version 1 gleich mal umgesetzt. Funktioniert super! ThumpUp. Vielen lieben Dank. Damit ist das Thema jedenfalls gelöst.

auch vielen lieben Dank an dich laster.


Möge euch die Hilfestellung mit allzeit schönem Wetter vergolten werden!!!