Top-Themen

Aktuelle Themen (A bis Z)

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, 4361 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 ..
Ähnliche Inhalte
Batch & Shell
Batch - Variablen
gelöst Frage von Marlon1Batch & Shell2 Kommentare

Hallo, Ich habe eine Frage zu Variablen. Und zwar ob es irgendwie geht das Batch mit ein IF Befehl ...

Windows Installation
CMD-Batch Programmstart Befehle
Frage von timsen96Windows Installation1 Kommentar

Schönen guten Tag zusammen, ich möchte gerne über eine cmd oder batch datei ein Programm oder Installation öffnen und ...

Batch & Shell
BATCH: Minuszeichen in set-Befehl
gelöst Frage von SchottenrockBatch & Shell3 Kommentare

Guten Morgen, ich komme gerade nicht weiter und es wit wohl nur eine Kleinigkeit, aber ich steh gerade auf ...

Entwicklung
Mit welchem Befehl kann ich in einer if schleife in Batch
gelöst Frage von JanInfoHDEntwicklung1 Kommentar

Mit welchem Befehl kann ich in einer if schleife in Batch dem Computer sagen das wenn die eingabe nicht ...

Neue Wissensbeiträge
Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 2 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 3 TagenWebbrowser7 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Sicherheit

Teamviewer Sessions können gekapert werden - Update tw. verfügbar

Information von sabines vor 3 TagenSicherheit6 Kommentare

In bestimmten Konstellationen können Teamviewer Sessions gekapert werden, wahrscheinlich aber ein recht unwahrscheinliches Szenario. Da der Teamviewer gerne für ...

Digitiales Fernsehen

Apple TV: Amazon Prime App ist verfügbar

Information von Frank vor 4 TagenDigitiales Fernsehen4 Kommentare

Die Amazon Prime Video App kann ab sofort auf einem Apple TV ab der 3 Generation installiert werden. Einfach ...

Heiß diskutierte Inhalte
Vmware
Installation Windows 10 VMware
Frage von Ghost108Vmware17 Kommentare

Hallo zusammen, versuche gerade mit Hilfe des vshpere clients eine virtuelle Windows 10 maschine aufzusetzen. 1. virtuelle Maschine erstellt ...

Exchange Server
SBS 2011 E-Mails können gesendet werden, aber nicht von extern empfangen
Frage von andreas1234Exchange Server14 Kommentare

Hallo Community, ich habe das Problem, dass seit knapp zwei Wochen die E-Mails von meinem SBS 2011 einwandfrei gesendet ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Windows Server
Server 2012 über Eingabeaufforderung devmgmt.msc geht nicht
gelöst Frage von achim222Windows Server9 Kommentare

Hallo, ich habe hier einen Server 2012 der im Reparaturmodus startet. Es liegt an einem falschen VirtIO Treiber für ...