1

Я боролся с этим некоторое время сейчас, и я не могу понять, почему.

У меня есть этот командный файл:

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

Моя переменная ctr устанавливается надлежащим образом, однако, когда я пытаюсь объединить ее, все, что я получаю, это: \Server-!СУУ! пароль / пользователь: домен \ имя пользователя. Я пытался %!СУУ!%,% ctr%, %% ctr, %% ctr %%, все для того, чтобы он просто возвращал буквенные символы, а не значение. Достаточно интересно, когда я вынимаю команду set, мое эхо!СУУ! действительно возвращает значение. Я также попытался заключить в кавычки заданные параметры - с теми же результатами, только кавычки вокруг него.

Что мне не хватает?

1 ответ1

0

Чего мне не хватает

Вы не используете команду set правильно.

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

Это создает переменную с именем "target" (обратите внимание на дополнительный пробел после имени).

Кроме того, правая часть выражения содержит пробелы, поэтому вам также понадобятся некоторые кавычки.

Любые лишние пробелы вокруг имени переменной или строки не будут проигнорированы, SET не прощает лишних пробелов, как многие другие языки сценариев.

Исходный набор

Попробуйте следующую замену:

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

Вы также не правильно используете (понимаете) отложенное расширение.

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

Отложенное расширение приведет к тому, что переменные будут расширены во время выполнения, а не во время разбора.

Источник enabledelayedexpansion

Это должно быть:

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

Дальнейшее чтение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .