2 Variablen in einem Batch Befehl
Hallo,
habe mal wieder ein Problem bei welchem ich eure Hilfe brauche.
Ich lese mit
FOR /F "delims=" %%i IN (d:\ordner\server.txt) DO call :test %%i
:test
echo %1
aus der server.txt die mehrere servernamen (untereinander) enthält,
die namen aus und verarbeite diese weiter (z.b. ein echo %1)
jetzt möchte ich aber die namen in einem befehl weiterverarbeiten bei
welchem ich 2 variablen nutzen muss, da ich über
FOR /F "delims=" %%i IN (\\%source-server%\e$\ordner\pruefen.txt) DO call :Produktiv %%i
aus einer weiteren datei wiederrum dateinamen einlese.
skizziert sieht dies dann so aus
copy Variable_Dateiname auf \\Variable_Server\c$\ordner\
ich möchte also mit der ersten variable die datei die die servernamen enthält auslesen und mit
der zweiten variable die dateinamen welche in der 2ten datei stehen einen copy job durchführen.
es befinden sich in beiden dateien mehrere angaben, also in der serverdatei mehrere servernamen
und in der datei-datei mehrere dateinamen
die frage ist nun, wie ich beide variablen in einem befehl gleichzeitig verwenden kann.
kann mir hierzu jemand helfen?
habe mal wieder ein Problem bei welchem ich eure Hilfe brauche.
Ich lese mit
FOR /F "delims=" %%i IN (d:\ordner\server.txt) DO call :test %%i
:test
echo %1
aus der server.txt die mehrere servernamen (untereinander) enthält,
die namen aus und verarbeite diese weiter (z.b. ein echo %1)
jetzt möchte ich aber die namen in einem befehl weiterverarbeiten bei
welchem ich 2 variablen nutzen muss, da ich über
FOR /F "delims=" %%i IN (\\%source-server%\e$\ordner\pruefen.txt) DO call :Produktiv %%i
aus einer weiteren datei wiederrum dateinamen einlese.
skizziert sieht dies dann so aus
copy Variable_Dateiname auf \\Variable_Server\c$\ordner\
ich möchte also mit der ersten variable die datei die die servernamen enthält auslesen und mit
der zweiten variable die dateinamen welche in der 2ten datei stehen einen copy job durchführen.
es befinden sich in beiden dateien mehrere angaben, also in der serverdatei mehrere servernamen
und in der datei-datei mehrere dateinamen
die frage ist nun, wie ich beide variablen in einem befehl gleichzeitig verwenden kann.
kann mir hierzu jemand helfen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 93252
Url: https://administrator.de/forum/2-variablen-in-einem-batch-befehl-93252.html
Ausgedruckt am: 19.05.2025 um 19:05 Uhr
13 Kommentare
Neuester Kommentar
Hallo Casper2k!
Etwa so:
oder, falls Du das Unterprogramm benötigst:
Grüße
bastla
Etwa so:
FOR /F "delims=" %%s IN (d:\inlog-update\server.txt) DO FOR /F "delims=" %%d IN (\\%source-server%\e$\ordner\pruefen.txt) DO copy "%%~d" "\\%%~s\c$\ordner\"
FOR /F "delims=" %%s IN (d:\inlog-update\server.txt) DO FOR /F "delims=" %%d IN (\\%source-server%\e$\ordner\pruefen.txt) DO call :Produktiv "%%~s" "%%~d"
goto :eof
:Produktiv
echo '%~1' '%~2'
goto :eof
bastla
Hallo Casper2k!
Vorher war noch die Rede von %1 ...
%%a existiert nur innerhalb der "for"-Schleife, daher:
[Edit] %~1 durch %%~a ersetzt. [/Edit]
Grüße
bastla
P.S.: Bitte beim Posten von Batches etc ""-Tags verwenden ...
Vorher war noch die Rede von %1 ...
%%a existiert nur innerhalb der "for"-Schleife, daher:
FOR /F "delims=" %%a IN (%logpath%\server_alle.txt) do (
echo Log-Verzeichnisse werden erstellt "%%~a"
md %logpath%\%date%
md %logpath%\%date%\'%%~a'\%counter%\
md %logpath%\%date%\'%%~a'\%counter%\ersetzt_durch\
)
Grüße
bastla
P.S.: Bitte beim Posten von Batches etc ""-Tags verwenden ...
Hallo Casper2k!
Sorry - hatte übersehen, dass Du oben in den "md"-Zeilen noch %~1 hattest - siehe Edit ...
%1 kannst Du in einem Unterprogramm verwenden, und das sähe dann so aus:
BTW: Es genügt die letzte "md"-Zeile - die "dazwischen" liegenden Verzeichnisse werden automatisch erstellt ...
Noch eine Anmerkung: Die Apostrophe um %~1 sind nicht erforderlich, sondern waren in meinem ersten Beispiel oben nur zu Demozwecken enthalten.
Grüße
bastla
Sorry - hatte übersehen, dass Du oben in den "md"-Zeilen noch %~1 hattest - siehe Edit ...
%1 kannst Du in einem Unterprogramm verwenden, und das sähe dann so aus:
FOR /F "delims=" %%a IN (%logpath%\server_alle.txt) do call :MakeDirs "%%a"
goto :eof
:MakeDirs
echo Log-Verzeichnisse werden erstellt %1
md %logpath%\%date%
md %logpath%\%date%\'%~1'\%counter%\
md %logpath%\%date%\'%~1'\%counter%\ersetzt_durch\
goto :eof
Noch eine Anmerkung: Die Apostrophe um %~1 sind nicht erforderlich, sondern waren in meinem ersten Beispiel oben nur zu Demozwecken enthalten.
Grüße
bastla
Hallo Casper2k!
Nach der Korrektur kleiner Ungenauigkeiten und dem Entfernen der wenig sinnvollen Zeilen 5 (diese Zeile wird bei korrektem Ablauf des Unterprogrammes ":ProcessClient_IRP_Produktiv" - wofür eine Beendigung dieses Unterprogrammes mit "goto :eof" oder durch das Erreichen des Batchendes Voraussetzung ist - immer erreicht), 9 und 19 sowie einiger nicht benötigter "/Y" ("copy" überschreibt bei Verwendung in einem Batch defaultmäßig bereits vorhandene Zieldateien) sowie dem Hinzufügen diverser Anführungszeichen (um auszuschließen, dass das Kopieren an Leerzeichen in einem Pfad scheitert) könnte der obige Batch-Teil etwa so aussehen (wobei allerdings zu berücksichtigen ist, dass ich den Rest des Batches nicht kenne):
Wenn Deiner "log.txt" nicht zu entnehmen ist, woran das Kopieren scheitert (immerhin protokollierst Du ja %~1 und %~2 an mehreren Stellen), bleibt Dir eigentlich nur, vor dem fehlerhaften Teil mittels "echo on" das "Anzeigen der Befehle vor der Ausführung" einzuschalten und den Batch von der Kommandozeile mit Umleitung der Ausgaben und Fehlermeldungen in eine weitere Protokolldatei zu starten, etwa
In der so entstehenden "D:\DeinBatchLog.txt" sind dann alle einzelnen Befehlszeilen und Fehlermeldungen enthalten, was Dir eigentlich das Auffinden des Fehlers ermöglichen sollte.
Grüße
bastla
Nach der Korrektur kleiner Ungenauigkeiten und dem Entfernen der wenig sinnvollen Zeilen 5 (diese Zeile wird bei korrektem Ablauf des Unterprogrammes ":ProcessClient_IRP_Produktiv" - wofür eine Beendigung dieses Unterprogrammes mit "goto :eof" oder durch das Erreichen des Batchendes Voraussetzung ist - immer erreicht), 9 und 19 sowie einiger nicht benötigter "/Y" ("copy" überschreibt bei Verwendung in einem Batch defaultmäßig bereits vorhandene Zieldateien) sowie dem Hinzufügen diverser Anführungszeichen (um auszuschließen, dass das Kopieren an Leerzeichen in einem Pfad scheitert) könnte der obige Batch-Teil etwa so aussehen (wobei allerdings zu berücksichtigen ist, dass ich den Rest des Batches nicht kenne):
REM #######################################################################################################
:IRP_Produktiv
FOR /F "delims=" %%s IN (%logpath%\server_alle.txt) DO FOR /F "delims=" %%d IN (%logpath%\pruefen.txt) DO call :ProcessClient_IRP_Produktiv "%%~s" "%%~d"
goto :Weiter
REM ####### Ende dieses Teiles ########
:ProcessClient_IRP_Produktiv
if not exist "\\%~1\d$\Programme\anwendung\Prod\name\ETATS\%~2" goto ProcessClient_IRP_Produktiv_Copy
:ProcessClient_IRP_Produktiv_Backup
echo ********************************************* >> %logpath%\log.txt
echo %~1 wird aus der Produktivumgebung gesichert. >> %logpath%\log.txt
echo Folgender Report wird aus der Produktivumgebung von %~1 gesichert: %~2 >> %logpath%\log.txt
copy "\\%~1\d$\Programme\anwendung\Prod\name\ETATS\%~2" "%logpath%\%date%\%~1\%counter%\" >> %logpath\log.txt
:ProcessClient_IRP_Produktiv_Copy
echo ********************************************* >> %logpath%\log.txt
echo Folgender Report wird in die Produktivumgebung kopiert: >> %logpath%\log.txt
echo %~1 >> %logpath%\log.txt
echo %~2 wird auf %~1 kopiert >> %logpath%\log.txt
copy "%logpath%\%~2" "\\%~1\d$\Programme\anwendung\Prod\name\ETATS" >> %logpath%\log.txt
copy "%logpath%\pruefen.txt" "%logpath%\%date%\%~1\%counter%\" >nul
copy "%logpath%\*.qrp" "%logpath%\%date%\%~1\%counter%\ersetzt_durch" >nul
if errorlevel 1 goto :Fehler
echo Kopiervorgang erfolgreich >> %logpath%\log.txt
REM Das Valid-Verzeichnis wird mit der neuen Datei upgedatet
ECHO Das Valid-Verzeichnis wird mit der neuen Datei upgedatet >> %logpath%\log.txt
copy "%logpath\*.qrp" "\\server\software$\anwendung\name\Valid\name\ETATS" >> %logpath%\log.txt
goto :eof
REM ######## Ende Unterprogramm #########
:Weiter
REM ######## Hier geht es nach den Schleifen oben weiter ... #########
D:\DeinBatch.cmd > D:\DeinBatchLog.txt 2>&1
Grüße
bastla