For-Schleife und Variablen durch nummerieren
Moin,
ich stehe mal wieder auf dem Schlauch und sehe die Lösung nicht ....
so sieht grob der code aus.
Problemzone ist gerade die For-Schleife: er zeigt mir maximal die Nummern an aber nicht die vorher definierten Variablen.
getestet hatte ich bereits
Wer kann mir helfen???
Danke
Nagus
ich stehe mal wieder auf dem Schlauch und sehe die Lösung nicht ....
so sieht grob der code aus.
Problemzone ist gerade die For-Schleife: er zeigt mir maximal die Nummern an aber nicht die vorher definierten Variablen.
setlocal enabledelayedexpansion
.
if not exist "%~dp0robocopy.exe" (set "scopy=xcopy /V /F /R /S /Y") else (set "scopy=%~dp0robocopy.exe /e /w:2 /r:5 /TEE /LOG+:%localpfad%\robocopy.log") && set copytyp=robocopy
.
set source1=x
set source2=y
set target1=j
set target2=k
.
.
.
for /L %%i in (1,1,4) do %scopy% %source%%%i %target%%%i
getestet hatte ich bereits
for /L %%i in (1,1,4) do "%scopy% %%source%%%i% %%target%%%i%"
.
for /L %%i in (1,1,4) do %scopy% %%%source%%%i%% %%%target%%%i%%
.
for /L %%i in (1,1,4) do %scopy% !%%%source%%%i%%! !%%%target%%%i%%!
Wer kann mir helfen???
Danke
Nagus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 230964
Url: https://administrator.de/contentid/230964
Ausgedruckt am: 24.11.2024 um 17:11 Uhr
18 Kommentare
Neuester Kommentar
Moin Nagus,
ergänzend zu bastlas Lösung hier ein Syntax-Beispiel ohne DelayedExpansion:
Ausgabe des Schnipsels
Grüße
Biber
ergänzend zu bastlas Lösung hier ein Syntax-Beispiel ohne DelayedExpansion:
:: TestVarInVar.cmd
@echo off & setlocal
:: ein paar "Mein"-Variablen setzen
Set "MeineVar=MeinX"
Set "MeinX1=MeinErsterWert"
Set "MeinX2=MeinZweiterWert"
Set "MeinX3=MeinDritterWert"
:: alle "Mein"-Variablen anzeigen
Set Mein
:: Zusammengesetzte Variable ohne DelayedExpansion benutzen
For /L %%i in ( 1 1 3) do @call echo %MeineVar% + i=%%i wird zu %%%MeineVar%%%i%%%
Ausgabe des Schnipsels
C:\Users\Biber>d:\temp\TestVarInVar.cmd
MeineVar=MeinX
MeinX1=MeinErsterWert
MeinX2=MeinZweiterWert
MeinX3=MeinDritterWert
MeinX + i=1 wird zu MeinErsterWert
MeinX + i=2 wird zu MeinZweiterWert
MeinX + i=3 wird zu MeinDritterWert
Grüße
Biber
Moin Nagus,
du benötigst für mein Beispiel keine aktivierte "Verzögerte Variablenauflösung" aka Anweisung
Es stört aber auch nicht, wenn du diese Anweisung in deinem Skript hast (weil du es an anderer Stelle brauchst).
Was du allerdings bei meiner Lösung benötigst sind starke Nerven oder einen extrem niedrigen Blutdruck.
Sonst wirst du bei der Eingabe des sechsten oder siebten Prozentzeichens in Folge bekloppt.
Besser lesbar ist bastlas Variante (wenn man einmal das Prinzip verstanden hat).
Grüße
Biber
du benötigst für mein Beispiel keine aktivierte "Verzögerte Variablenauflösung" aka Anweisung
SetLocal EnableDelayedExpansion
.Es stört aber auch nicht, wenn du diese Anweisung in deinem Skript hast (weil du es an anderer Stelle brauchst).
Was du allerdings bei meiner Lösung benötigst sind starke Nerven oder einen extrem niedrigen Blutdruck.
Sonst wirst du bei der Eingabe des sechsten oder siebten Prozentzeichens in Folge bekloppt.
Besser lesbar ist bastlas Variante (wenn man einmal das Prinzip verstanden hat).
Grüße
Biber
Moin bastla,
Lass ich mal als Benefit gelten...
Grüße
Biber
Zitat von @bastla:
... und als Ergänzung: Keine "Verzögerte Variablenauflösung" bedeutet aber auch: Keine Probleme mit
"!" in Variablenwerten ...
Somit kannst du auch diese Variable definieren:... und als Ergänzung: Keine "Verzögerte Variablenauflösung" bedeutet aber auch: Keine Probleme mit
"!" in Variablenwerten ...
set Meine!!NurMeine!!FingerWech!!Var=Voooorsicht!!
Lass ich mal als Benefit gelten...
Grüße
Biber
Hallo Biber,
Jetzt verstehe ich, warum du drei Prozent extra spendiert hast.
Gruss Endoro.
Zitat von @Biber:
Was du allerdings bei meiner Lösung benötigst sind starke Nerven oder einen extrem niedrigen Blutdruck.
Was du allerdings bei meiner Lösung benötigst sind starke Nerven oder einen extrem niedrigen Blutdruck.
Jetzt verstehe ich, warum du drei Prozent extra spendiert hast.
Gruss Endoro.
Hey,
falls im Pfad zur Logdatei Leerzeichen sind, muss der auch in Quotes gesetzt werden.
Gruss.
PS: Robocopy interpretiert den am Pfad-Ende stehenden Backslash als escaping character, also muss es so:
oder so:
gemacht werden.
falls im Pfad zur Logdatei Leerzeichen sind, muss der auch in Quotes gesetzt werden.
Gruss.
PS: Robocopy interpretiert den am Pfad-Ende stehenden Backslash als escaping character, also muss es so:
set "source1=C:\Documents and Settings\%username_alt%\Favorites"
set "source1=C:\Documents and Settings\%username_alt%\Favorites\\"
PS: Robocopy interpretiert den am Pfad-Ende stehenden Backslash als escaping character, also muss es so:
ich schließe da immer Quelle und Ziel mit einem Backslash und Punkt. Da passt alles mit den umschließenden Anführungszeichen und/oder der vorher vorhandene abschließende Backslash.
robocopy "Q:\Quellpfad\\." "Z:\Zielpfad\."
als entsprechende Zeile dann:
for /L %%i in (1,1,4) do %scopy% "!source%%i!\." "!target%%i!\."
Gruß Phil