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
GELÖST

2 Variablen in einem Batch Befehl

Frage Entwicklung Batch & Shell

Mitglied: Casper2k

Casper2k (Level 1) - Jetzt verbinden

30.07.2008, aktualisiert 07.08.2008, 4335 Aufrufe, 13 Kommentare

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?
Mitglied: bastla
30.07.2008 um 16:39 Uhr
Hallo Casper2k!

Etwa so:
01.
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\"
oder, falls Du das Unterprogramm benötigst:
01.
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" 
02.
goto :eof 
03.
 
04.
:Produktiv 
05.
echo '%~1' '%~2' 
06.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: Casper2k
31.07.2008 um 07:23 Uhr
oh super!

mit dem 2ten kann ich mal weitermachen.
danke mal!
Bitte warten ..
Mitglied: Casper2k
31.07.2008 um 14:03 Uhr
ah eins noch:

warum %%s und %%d ?
kann das nicht %%a und %%b heißen?
Bitte warten ..
Mitglied: bastla
31.07.2008 um 14:45 Uhr
Hallo Casper2k!

warum %%s und %%d ?
Mnemotechnisch für Server und Datei ...

kann das nicht %%a und %%b heißen?
Wenn Du gesteigerten Wert darauf legst: natürlich - hättest Du aber auch ganz einfach ausprobieren können ...

Grüße
bastla
Bitte warten ..
Mitglied: Casper2k
31.07.2008 um 14:53 Uhr
hmmm ja das habe ich auch.

kann es aber sein, das da nur maximal 1 mal die variable verarbeitet wird?

ich habe %1 dann später nochmal verwenden wollen, da hat es dann aber
mit der variable nicht mehr getan...
Bitte warten ..
Mitglied: bastla
31.07.2008 um 14:58 Uhr
Hallo Casper2k!

%1 gilt im Unterprogramm ":Produktiv" - solange die gewünschte Verwendung innerhalb dieses Unterprogrammes (also vor "goto :eof") erfolgt, steht der Parameter auch zur Verfügung.

Grüße
bastla
Bitte warten ..
Mitglied: Casper2k
31.07.2008 um 15:31 Uhr
hmm komisch.

dann müsste doch eigentlich

FOR /F "delims=" %%a IN (%logpath%\server_alle.txt) do echo Log-Verzeichnisse werden erstellt "%%~a"
md %logpath%\%date%
md %logpath%\%date%\'%~1'\%counter%\
md %logpath%\%date%\'%~1'\%counter%\ersetzt_durch\

funktionieren. %logpath% und %counter% habe ich natürlich schon als variable gesetzt.
Leider wird die Variable aber nicht gesetzt. Es erschein nur: ''
Bitte warten ..
Mitglied: bastla
31.07.2008 um 15:35 Uhr
Hallo Casper2k!

Vorher war noch die Rede von %1 ...

%%a existiert nur innerhalb der "for"-Schleife, daher:
01.
FOR /F "delims=" %%a IN (%logpath%\server_alle.txt) do ( 
02.
    echo Log-Verzeichnisse werden erstellt "%%~a" 
03.
    md %logpath%\%date% 
04.
    md %logpath%\%date%\'%%~a'\%counter%\ 
05.
    md %logpath%\%date%\'%%~a'\%counter%\ersetzt_durch\ 
06.
)
[Edit] %~1 durch %%~a ersetzt. [/Edit]

Grüße
bastla

P.S.: Bitte beim Posten von Batches etc "<code></code>"-Tags verwenden ...
Bitte warten ..
Mitglied: Casper2k
31.07.2008 um 15:43 Uhr
ja mit %1 hab ichs auch versucht. aber rein damit ichs kapiere - wie müsste es denn aussehen wenn ich %1 nutzen möchte?
Bitte warten ..
Mitglied: bastla
31.07.2008 um 16:10 Uhr
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:
01.
FOR /F "delims=" %%a IN (%logpath%\server_alle.txt) do call :MakeDirs "%%a" 
02.
goto :eof 
03.
 
04.
:MakeDirs 
05.
echo Log-Verzeichnisse werden erstellt %1 
06.
md %logpath%\%date% 
07.
md %logpath%\%date%\'%~1'\%counter%\ 
08.
md %logpath%\%date%\'%~1'\%counter%\ersetzt_durch\ 
09.
goto :eof
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
Bitte warten ..
Mitglied: Casper2k
06.08.2008 um 16:34 Uhr
Nochmal ich


ich komm mit meinem Script einfach noch nicht weiter

habe hier mal einen teil des scriptes welcher mir noch probleme macht.

der teil "copy %logpath%\%~2 %logpath%\%date%\%~1\%counter%\ersetzt_durch"
scheint nichts zu kopieren, warum auch immer...

kann m ir da mal jemand auf die sprünge helfen?

thx
Casper
01.
REM ####################################################################################################### 
02.
:IRP_Produktiv 
03.
 
04.
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"  
05.
echo Es ist ein Fehler im Bereich :IRP_Produktiv aufgetreten >> %logpath%\log.txt 
06.
 
07.
:ProcessClient_IRP_Produktiv 
08.
 
09.
if exist \\%~1\d$\Programme\anwendung\Prod\name\ETATS\%~2 goto ProcessClient_IRP_Produktiv_Backup 
10.
if not exist \\%~1\d$\Programme\anwendung\Prod\name\ETATS\%~2 goto ProcessClient_IRP_Produktiv_Copy 
11.
 
12.
:ProcessClient_IRP_Produktiv_Backup 
13.
echo ********************************************* >> %logpath%\log.txt 
14.
echo %~1 wird aus der Produktivumgebung gesichert. >> %logpath%\log.txt 
15.
 
16.
echo Folgender Report wird aus der Produktivumgebung von %~1 gesichert: %~2 >> %logpath%\log.txt 
17.
copy \\%~1\d$\Programme\anwendung\Prod\name\ETATS\%~2 %logpath%\%date%\%~1\%counter%\ >> %logpath\log.txt 
18.
 
19.
goto ProcessClient_IRP_Produktiv_Copy 
20.
 
21.
:ProcessClient_IRP_Produktiv_Copy 
22.
echo ********************************************* >> %logpath%\log.txt 
23.
echo Folgender Report wird in die Produktivumgebung kopiert: >> %logpath%\log.txt 
24.
echo %~1 >> %logpath%\log.txt 
25.
 
26.
echo %~2 wird auf %~1 kopiert >> %logpath%\log.txt 
27.
copy %logpath%\%~2 \\%~1\d$\Programme\anwendung\Prod\name\ETATS /Y >> %logpath%\log.txt 
28.
copy %logpath%\pruefen.txt %logpath%\%date%\%~1\%counter%\ 
29.
 
30.
copy %logpath%\*.qrp %logpath%\%date%\%~1\%counter%\ersetzt_durch 
31.
 
32.
if errorlevel = 0 do call echo Kopiervorgang erfolgreich >> %logpath%\log.txt 
33.
if errorlevel = 1 do call :Fehler 
34.
 
35.
REM Das Valid-Verzeichnis wird mit der neuen Datei upgedatet 
36.
ECHO Das Valid-Verzeichnis wird mit der neuen Datei upgedatet >> %logpath%\log.txt 
37.
 
38.
copy %logpath\*.qrp \\server\software$\anwendung\name\Valid\name\ETATS /Y >> %logpath%\log.txt 
39.
goto :ende 
40.
REM #######################################################################################################
Bitte warten ..
Mitglied: bastla
06.08.2008 um 21:56 Uhr
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):
01.
REM ####################################################################################################### 
02.
:IRP_Produktiv 
03.
 
04.
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"  
05.
goto :Weiter 
06.
REM ####### Ende dieses Teiles ######## 
07.
 
08.
:ProcessClient_IRP_Produktiv 
09.
if not exist "\\%~1\d$\Programme\anwendung\Prod\name\ETATS\%~2" goto ProcessClient_IRP_Produktiv_Copy 
10.
 
11.
:ProcessClient_IRP_Produktiv_Backup 
12.
echo ********************************************* >> %logpath%\log.txt 
13.
echo %~1 wird aus der Produktivumgebung gesichert. >> %logpath%\log.txt 
14.
 
15.
echo Folgender Report wird aus der Produktivumgebung von %~1 gesichert: %~2 >> %logpath%\log.txt 
16.
copy "\\%~1\d$\Programme\anwendung\Prod\name\ETATS\%~2" "%logpath%\%date%\%~1\%counter%\" >> %logpath\log.txt 
17.
 
18.
:ProcessClient_IRP_Produktiv_Copy 
19.
echo ********************************************* >> %logpath%\log.txt 
20.
echo Folgender Report wird in die Produktivumgebung kopiert: >> %logpath%\log.txt 
21.
echo %~1 >> %logpath%\log.txt 
22.
 
23.
echo %~2 wird auf %~1 kopiert >> %logpath%\log.txt 
24.
copy "%logpath%\%~2" "\\%~1\d$\Programme\anwendung\Prod\name\ETATS" >> %logpath%\log.txt 
25.
copy "%logpath%\pruefen.txt" "%logpath%\%date%\%~1\%counter%\" >nul 
26.
 
27.
copy "%logpath%\*.qrp" "%logpath%\%date%\%~1\%counter%\ersetzt_durch" >nul 
28.
if errorlevel 1 goto :Fehler 
29.
 
30.
echo Kopiervorgang erfolgreich >> %logpath%\log.txt 
31.
 
32.
REM Das Valid-Verzeichnis wird mit der neuen Datei upgedatet 
33.
ECHO Das Valid-Verzeichnis wird mit der neuen Datei upgedatet >> %logpath%\log.txt 
34.
 
35.
copy "%logpath\*.qrp" "\\server\software$\anwendung\name\Valid\name\ETATS" >> %logpath%\log.txt 
36.
goto :eof 
37.
REM ######## Ende Unterprogramm ######### 
38.
 
39.
:Weiter 
40.
REM ######## Hier geht es nach den Schleifen oben weiter ... #########
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
01.
D:\DeinBatch.cmd > D:\DeinBatchLog.txt 2>&1
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
Bitte warten ..
Mitglied: Casper2k
07.08.2008 um 13:28 Uhr
klasse, jetzt tuts! danke dir!!
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst FOR Loop Variablen ( Batch ) (2)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst Variablen Zusammenbauen 2.0 ( Batch ) (6)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst Grosses Variablen Problem ( Batch) (30)

Frage von clragon zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (22)

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

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...