nagus
Goto Top

Variable aus zwei anderen erzeugen - Script optimierung

Moin,

da ich derzeit ein wenig auf dem Schlauch stehe und trotz suche nicht die passende Lösung gefunden habe, wäre ich für ein bisschen Hilfe sehr dankbar ....

Das Script soll zwei Dateien auf verschiedenen PCs verteilen. Da die Namens Auflösung derzeit noch nicht geht muss ich über die IPs gehen, sonst wäre es noch einmal einfacher. Ich habe das ganze noch ein wenig gekürzt, als Platzhalter die ...

Zwei Fragen habe ich:
1. Beim Verbinden des laufwerkes wollte ich die Variable standortXX bauen wobei das xx jeweils aus einer anderen Variablen kommt. Klappt nicht, egal in welcher Variante. Ich vermute hier benötige ich eine andere Schreibweise, habe aber einfach nix passendes gefunden ...

2. Das Script hat sicherlich noch Optimierungsmöglichkeiten, da ich einfach zu doof bin, die "richtigen" for schleifen zu basteln ist immer schief gegangen - schnief
Gruß
Nagus


rem @echo off
Title Verteilungsscript
color 1F
setlocal enabledelayedexpansion

set "standort10=192.168.110.149"  
set "standort12=192.168.112.149"  
...
set "standort23=192.168.124.149"  

set "id=xxxx"  
set "pass=yyyy"  
set "para=/persistent:no"  
set "pfad=c:\verzeichnis\daten"  
REM Starte Log-Datei
echo blabla >%pfad%\CopyJob.log
echo.>>%pfad%\CopyJob.log
echo -------------------------------------------------->>%pfad%\CopyJob.log
echo Start am: %date:~0,12%>>%pfad%CopyJob.log
echo Start um: %time:~0,8%>>%pfad%CopyJob.log
echo -------------------------------------------------->>%pfad%\CopyJob.log

net use t: /d /y >nul
@echo on

:10
set "einr=10"  
set "return=12"  
goto verbinde

:12
set {{comment_strings:23179498889}} 
set "return=14"  
goto verbinde

...

:23
set "einr=23"  
set "return=ende"  
goto verbinde

:verbinde
net use t: \\standort%einr%\freigabe$ /user:%id% %pass% %para%
if %errorlevel% NEQ 0 goto Fehler
goto kopiere

:Fehler
echo --> standort%einr%>>%pfad%CopyJob.log
echo Es ist ein Fehler beim verbinden des Laufwerks fuer standort%einr% augetreten>>%pfad%\CopyJob.log
echo.>>%pfad%\CopyJob.log
goto %return%

:kopiere
echo --< standort%haus%>>%pfad%\CopyJob.log
copy %pfad%\standort%einr%\Datei1.TXT t:\ /v >>%pfad%\CopyJob.log
copy %pfad%\standort%einr%\Datei2.txt t:\ /v>>%pfad%\CopyJob.log

:trenne
net use t: /d /y
goto %return%

:ende
%pfad%\bmail.exe -s 192.168.101.23 -p 25 -t xxx.xxx@yyyy.de -f absender@yyyyy.de -a Betreff -m %pfad%\CopyJob.log

Content-Key: 179220

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

Printed on: April 20, 2024 at 00:04 o'clock

Member: icsat
icsat Jan 20, 2012 at 07:23:29 (UTC)
Goto Top
Hallo Nagus,

auf die schnelle und ungetestet folgender Vorschlag:

Zeile 43,5:
set "ziel=standort%einr%"  

und Zeile 44:
net use t: \\%ziel%\freigabe$ /user:%id% %pass% %para% 


Gruß icsAT
Member: hajowe
hajowe Jan 20, 2012 at 07:29:14 (UTC)
Goto Top
nimme die " noch weg dann sollte es gehen
Hier ein kleiner Test
mit ein paar definitionen. Speicher es unter test und führe es aus dann siehst du das die Set Variablen zusammengesetzt sind
Echo On
set Teil1=123
set Teil2=456
set teil3= %Teil1%%Teil2%
set einr=5
set ziel=standort%einr%
Member: Logan000
Logan000 Jan 20, 2012 at 07:34:24 (UTC)
Goto Top
Moin Moin

Plan B:
Da deine Stadort IP ja einem Schema folgen ..
set "standort10=192.168.110.149"  
set "standort12=192.168.112.149"  
...
set "standort23=192.168.124.149"  
könntest du doch beim Verbinden so vorgehen:
...
:verbinde
net use t: \\192.168.1%einr%.149\freigabe$ /user:%id% %pass% %para%
if %errorlevel% NEQ 0 goto Fehler
goto kopiere
...
und natürlich analog beim kopieren.

Gruß L.
Member: Nagus
Nagus Jan 20, 2012 at 08:18:36 (UTC)
Goto Top
Erstmal Danke - muss das jetzt "verarbeiten" melde mich dann aber wieder ...

schei... multitasking auf der Arbeit ...

Gruß
Nagus
Member: icsat
icsat Jan 20, 2012 at 08:42:27 (UTC)
Goto Top
Moin hajowe,

kannst Du kurz erklären, warum die " weg sollen? Mir ist das jetzt nicht ganz klar. Das Ergebnis sollte im Normalfall unabhängig von den " identisch sein.

Bei Deinem teil3 hat sich hinter dem = ein SPACE eingeschlichen.


Gruß icsAT
Member: Nagus
Nagus Jan 20, 2012 at 08:47:11 (UTC)
Goto Top
Zitat von @hajowe:
nimme die " noch weg dann sollte es gehen
Hier ein kleiner Test
mit ein paar definitionen. Speicher es unter test und führe es aus dann siehst du das die Set Variablen zusammengesetzt sind
Echo On
set Teil1=123
set Teil2=456
set teil3= %Teil1%%Teil2%
set einr=5
set ziel=standort%einr%



Okay das funktioniert nicht weil ich ja die IP haben möchte:

set "standort10=192.168.110.149"  

set "einr=10"   

net use t: \\standort%einr%\freigabe$ /user:%id% %pass% %para% 

als Ergebnis möchte ich im Script
net use t: \\192.168.110.149\freigabe$ /user:%id% %pass% %para% 
stehen haben ...

oder denke ich gerade falsch ... -.-
Member: icsat
icsat Jan 20, 2012 at 08:54:40 (UTC)
Goto Top
Hallo Logan000,

das funktioniert für 10 und 12 in diesem Beispiel aber nicht für Standort 23, weil dort in der IP ne 24 erwartet wird.
Ich würde ohnehin Liste (Datei) mit allen IP-Adressen bereitstellen und diese per for abarbeiten.

Gruß icsAT
Member: Logan000
Logan000 Jan 20, 2012 at 09:04:56 (UTC)
Goto Top
Moin

Zitat von @icsat:
das funktioniert für 10 und 12 in diesem Beispiel aber nicht für Standort 23, weil dort in der IP ne 24 erwartet wird.
Ich würde ohnehin Liste (Datei) mit allen IP-Adressen bereitstellen und diese per for abarbeiten.

Gut aufgepasst.
Die Variable einr wäre dann keine Standort bezeichnung mehr sondern nur ein IP fragment und die deklarionen müssten entsprechend angepasst werden.
(falls das kein Tippfehler war.)

Gruß L.
Member: bastla
bastla Jan 20, 2012 at 12:24:26 (UTC)
Goto Top
Hallo @all!

Vielleicht als Anhaltspunkt für eine mögliche Lösung:
@echo off & setlocal
set "Prefix=standort"  
set "standort10=192.168.110.149"  
set "standort12=192.168.112.149"  

set "Nr=10"  
call set "IP=%%%Prefix%%Nr%%%"  
echo %IP%
Alternative: "delayedExpansion"

Grüße
bastla
Member: Nagus
Nagus Jan 20, 2012 at 12:32:39 (UTC)
Goto Top
Moin hajowe,

das löst leider nicht mein Problem!

ich möchte ja:

set Teil1=192.168.110.100
set Teil2=1

net use t: \\Teil%Teil2% ....

Die Variable Teil1 soll zur Laufzeit aus einer anderen zusammengebaut werden. Sorry kann das nicht besser erklären ....
Member: Nagus
Nagus Jan 20, 2012 at 14:45:36 (UTC)
Goto Top
Bastler - ich danke Dir!

Das war es!!!

Allerdings kapiere ich noch nicht warum der Call Befehl notwendig ist ...
:-?
setlocal enabledelayedexpansion 

habe ich ja gesetzt. geht es dann auch mit

set "IP=%%%Prefix%%NR%%%"  

Und warum die drei Prozent Zeichen?

Wäre nett wenn Du mich noch aufklären würdest nur in Bezug auf meine Fragen oben, über den Rest weiß ich soweit bescheid face-smile
Member: bastla
bastla Jan 20, 2012 at 15:52:32 (UTC)
Goto Top
Hallo Nagus!

Wenn Du "delayedExpansion" verwendest, dann so:
set "IP=!%Prefix%%Nr%!"
Sinn der Aktion ist es, in einem ersten Schritt, %Prefix% und %Nr% zum Ergebnis "standort10" umzuwandeln und danach (= "verzögert") dieses Ergebnis als Variablennamen aufzulösen - genau das macht auch die "call"-Variante, mit dem Unterschied, dass hier eine weitere CMD-Instanz aufgerufen wird, in welcher zunächst die Variablen mit dem einen Prozentzeichen aufgelöst werden, wobei auch aus den weiteren 2 Prozentzeichen "außen herum" jeweils nur eines gemacht wird, sodass danach das Ergebnis von %standort10% zurückgegeben werden kann; schrittweise sieht das also so aus:
Aufruf:                    %%%Prefix%%Nr%%%
zweite Instanz:            %%standort10%%
zurück an erste Instanz:   %standort10%
Auflösung:                 192.168.110.149
Grüße
bastla
Member: Nagus
Nagus Jan 22, 2012 at 11:58:32 (UTC)
Goto Top
Okay, daran muss ich noch ein wenig "knabbern" und das in meinem Alter face-wink

Script rennt und wird jetzt noch optimiert: email Benachrichtigung (rennt), Datei Vergleich (in Arbeit).

Danke für die Hilfe! Wenn's dann mal fertig ist, werde ich es posten. Viellicht hilft es ja noch anderen ..

Gruß Nagus