Kann einen String in einer Batch-Schleife nicht verketten

2

Ich habe jetzt schon eine Weile damit zu kämpfen und ich kann nicht herausfinden, warum.

Ich habe diese Batch-Datei:

@echo on    
setlocal enabledelayedexpansion

for /F %%x in (FileList.txt) do (
    for /L %%i in (1,1,16) do (
        if %%i LSS 10 (set ctr=0%%i) else (set ctr=%%i)
        echo !ctr!
        set target = \\Server-!ctr! password /user:domain\username
        echo %target%
        echo net use z: %target%
        echo copy %%x "z:%%~pnx" /Y
        echo net use z: /delete
    )
)

Meine CTR-Variable wird entsprechend eingestellt. Wenn ich jedoch versuche, sie zu verketten, erhalte ich nur Folgendes: \ Server-! CTR! Passwort / Benutzer: Domäne \ Benutzername. Ich habe%! Ctr!%,% Ctr%, %% ctr, %% ctr %% ausprobiert, um nur die Literalzeichen zurückzugeben - nicht den Wert. Interessanterweise wird mein Echo! Ctr! gibt den Wert zurück. Ich habe auch versucht, die eingestellten Parameter in Anführungszeichen zu setzen - mit den gleichen Ergebnissen, nur Anführungszeichen.

Was vermisse ich?

user4450016
quelle

Antworten:

0

Was vermisse ich

Sie verwenden den setBefehl nicht richtig.

set target = \\Server-!ctr! password /user:domain\username

Dadurch wird eine Variable mit dem Namen "target" erstellt (beachten Sie das zusätzliche Leerzeichen nach dem Namen).

Außerdem enthält die rechte Seite des Ausdrucks Leerzeichen, sodass Sie auch einige Anführungszeichen benötigen.

Alle zusätzlichen Leerzeichen um den Variablennamen oder die Zeichenfolge werden nicht ignoriert. SET vergibt keine zusätzlichen Leerzeichen wie in vielen anderen Skriptsprachen.

Quelle Set

Versuchen Sie den folgenden Ersatz:

set target="\\Server-!ctr! password /user:domain\username"

Sie verwenden die verzögerte Erweiterung auch nicht richtig.

echo %target%
echo net use z: %target%

Eine verzögerte Erweiterung bewirkt, dass Variablen zur Ausführungszeit und nicht zur Analysezeit erweitert werden.

Quelle aktiviert, verzögerte Erweiterung

Das sollte sein:

echo !target!
echo net use z: !target!

Weitere Lektüre

DavidPostill
quelle