Não é possível concatenar uma string dentro de um loop de lote

1

Eu tenho lutado com isso por um tempo agora, e não consigo descobrir o porquê.

Eu tenho esse arquivo em lotes:

@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
    )
)

Minha variável ctr está sendo configurada adequadamente, no entanto, quando tento concatená-la, tudo que eu obtenho é: \ Server-! ctr! senha / usuário: domínio \ nome de usuário. Eu tentei%! Ctr!%,% Ctr%, %% ctr, %% ctr %%, tudo para apenas retornar os caracteres literais - não o valor. Interessante o suficiente, quando eu tiro o comando set, meu eco! Ctr! retorna o valor. Eu também tentei colocar os parâmetros definidos entre aspas também - com os mesmos resultados, apenas aspas ao redor.

O que estou perdendo?

    
por user4450016 27.07.2017 / 15:02

1 resposta

0

O que estou perdendo

Você não está usando o comando set corretamente.

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

Isso cria uma variável chamada "target" (observe o espaço extra após o nome).

Além disso, o lado direito da expressão contém espaços, então você também precisa de algumas citações.

Any extra spaces around either the variable name or the string, will not be ignored, SET is not forgiving of extra spaces like many other scripting languages.

Fonte conjunto

Tente a seguinte substituição:

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

Você também não está usando (compreendendo) a expansão atrasada corretamente.

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

Delayed Expansion will cause variables to be expanded at execution time rather than at parse time.

Fonte expansão ativadaelayed

Isso deve ser:

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

Leitura Adicional

por 27.07.2017 / 15:08