Variablenveränderung mit Hilfe von Zählschleife
Hallo Zusammen,
ich möchte mit Hilfe einer Zählschleife die Outlet Variablen bei jedem Durchgang +1 setzen
um dann ab der Sprungmarke SyncStart den Wert von Outlet_1, Outlet_2...usw zu verwenden.
Beim Test mit echo %Outlet% erhalte ich aber immer nur die Ausgabe Outlet_1 und nicht den Wert.
Würde mich über eine Brechstange freuen, die das Brett vor meinem Kopf löst. ;)
ich möchte mit Hilfe einer Zählschleife die Outlet Variablen bei jedem Durchgang +1 setzen
um dann ab der Sprungmarke SyncStart den Wert von Outlet_1, Outlet_2...usw zu verwenden.
Beim Test mit echo %Outlet% erhalte ich aber immer nur die Ausgabe Outlet_1 und nicht den Wert.
Würde mich über eine Brechstange freuen, die das Brett vor meinem Kopf löst. ;)
@echo off
title HeadquarterSync
:: Allgemeine Pfadangaben
set MatrixServerPath=\\127.0.0.1\Matrix$
set MatrixOutlets=%MatrixServerPath%\MatrixFiliale
set MatrixScriptLog=%MatrixServerPath%\MatrixScrip\zzz-ScriptLog
:: Filialen
set Headquarter=%MatrixOutlets%\Headquarter
set Outlet_1=%MatrixOutlets%\Filiale_1
set Outlet_2=%MatrixOutlets%\Filiale_2
set Outlet_3=%MatrixOutlets%\Filiale_3
set Outlet_4=%MatrixOutlets%\Filiale_4
set Outlet_5=%MatrixOutlets%\Filiale_5
set Outlet_6=%MatrixOutlets%\Filiale_6
set Outlet_7=%MatrixOutlets%\Filiale_7
set Outlet_8=%MatrixOutlets%\Filiale_8
set Outlet_9=%MatrixOutlets%\Filiale_9
set Outlet_10=%MatrixOutlets%\Filiale_10
set includes=waiters.dat families.dat articles.dat famgroups.dat
set /a OutletID=0
:OutletCheck
if /I %OutletID% GEQ 10 goto :SyncEnd
set /a OutletID=%OutletID%+1
set Outlet=Outlet_%OutletID%
echo %Outlet%
if not exist "%MatrixOutlets%\%Outlet%" goto SyncEnd
set RobocopyParam=/E /MT:4 /XD handhelds licences /XF *.old /COPY:DAT /R:2 /W:2 /LOG+:%MatrixScriptLog%\HeadquarterSync_robocopy.log /X /NS /NP /NC /V /NDL /NFL
:SyncStart
:: usr\data
%MatrixServerPath%\MatrixTools\robocopy.exe %Headquarter%\usr\data\ %includes% %Outlet%\usr\data %RobocopyParam%
:: Zwänge: usr\data\constr
%MatrixServerPath%\MatrixTools\robocopy.exe %Headquarter%\usr\data\constr %Outlet%\usr\constr %RobocopyParam%
:: Preise: usr\prices
%MatrixServerPath%\MatrixTools\robocopy.exe %Headquarter%\usr\data\prices %Outlet%\usr\prices %RobocopyParam%
goto OutletCheck
:SyncEnd
PAUSE
exit 0
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 300015
Url: https://administrator.de/contentid/300015
Ausgedruckt am: 22.11.2024 um 09:11 Uhr
10 Kommentare
Neuester Kommentar
Moin n0cturne,
ergänze in deinem Schnipsel die Zeile 01 auf
Stichwort
Ändere die Zeile 30 zur Demo auf
(und füge erstmal in der Zeile darunter ein
Ergebnis sollte sein.
Wenn das Ergebnis deinen Wünschen entspricht, dann ändere in den Zeilen unterhalb Zeile 30 auch das %outlet% in !%outlet%!.
Abgesehen davon hat Gersen recht - du machst dir das Leben zu schwer mit dem dutzend Variablen.
Die kannst du alle in der Pseudo-Hochzählschleife abfackeln.
Grüße
Biber
ergänze in deinem Schnipsel die Zeile 01 auf
@echo off & setlocal enableDelayedExpansion
Stichwort
DelayedExpansion
-> ForumssucheÄndere die Zeile 30 zur Demo auf
echo Outlet=%Outlet% Inhalt:!%outlet%!
(und füge erstmal in der Zeile darunter ein
goto :eof
ein.))Ergebnis sollte sein.
Outlet=Outlet_1 Inhalt:\\127.0.0.1\Matrix$\MatrixFiliale\Filiale_1
Wenn das Ergebnis deinen Wünschen entspricht, dann ändere in den Zeilen unterhalb Zeile 30 auch das %outlet% in !%outlet%!.
Abgesehen davon hat Gersen recht - du machst dir das Leben zu schwer mit dem dutzend Variablen.
Die kannst du alle in der Pseudo-Hochzählschleife abfackeln.
Grüße
Biber
Moin n0cturne,
es gibt auch zu
Es sollte reichen, wenn du nach den Zeilen, in denen du die "Verzögerte Variablenauflösung" definitiv brauchst.
Also sinngemäß
Grüße
Biber
es gibt auch zu
setlocal EnableDelayedExpansion
das Gegenstück SetLocal DisableDelayedExpansion
.Es sollte reichen, wenn du nach den Zeilen, in denen du die "Verzögerte Variablenauflösung" definitiv brauchst.
Also sinngemäß
....
SetLocal EnableDelayedExpansion
FOR /F .... %%i in ....(..) DO (
Set "password=%%i"
Set "password=!password=~7,8!" & Rem als Beispiel
)
SetLocal DisableDelayedExpansion
Echo Passwort=[%passwort%]
...
Grüße
Biber
Moin n0cturne,
auf den ersten flüchtigen Blick:
Lass einfach in Zeile 01 das
Und weiter: Ändere sicherheitshalber die Schreibweise bei den SETs so:
Nur um unerwünschte trailing blanks auszuschliessen.
Nicht dass wir an der ganz falschen Stelle einen Fehler suchen.
Grüße
Biber
auf den ersten flüchtigen Blick:
Lass einfach in Zeile 01 das
EnableDelayedExpansion
ersatzlos weg - du benötigst in dem Schnipsel doch keine verzögerte Variablenauflösung.Und weiter: Ändere sicherheitshalber die Schreibweise bei den SETs so:
set "SQLPassword=Passwort!"
Nur um unerwünschte trailing blanks auszuschliessen.
Nicht dass wir an der ganz falschen Stelle einen Fehler suchen.
Grüße
Biber
DelayedExpansion kann an jeder Stelle im Skript an und aus geschaltet werden
Dort wo man es eben braucht schaltet man sie vorher ein und danach wieder aus.
Gruß skybird
Setlocal Enabledelayedexpansion
REM mach hier was mit delayed expansion !Variable!
Setlocal Disabledelayedexpansion
Gruß skybird
Moin n0cturne,
um skybirds Antwort für dich noch eindeutiger zu präzisieren:
Nach der heutigen Zeile 32 ein
Grüße
Biber
um skybirds Antwort für dich noch eindeutiger zu präzisieren:
Zitat von @n0cturne:
Allerdings bekomme ich so ein Problem mit der SQLDatabase Variable,
die ich in Zeile 31 und 32 benutze.
Dann halt VOR der heutigen Zeile 31 ein Allerdings bekomme ich so ein Problem mit der SQLDatabase Variable,
die ich in Zeile 31 und 32 benutze.
Setlocal EnableDelayedExpansion
einfügen.Nach der heutigen Zeile 32 ein
Setlocal DisableDelayedExpansion
einfügen.Grüße
Biber