Невозможно объединить строку внутри пакетного цикла

1063
user4450016

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

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

@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%, %% ctr, %% ctr %%, все, чтобы он просто возвращал буквенные символы, а не значение. Интересно, что когда я выношу команду set, мой echo! Ctr! действительно возвращает значение. Я также попытался заключить в кавычки заданные параметры - с теми же результатами, только кавычки вокруг него.

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

1

1 ответ на вопрос

0
DavidPostill

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

Вы не используете 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! 

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

Похожие вопросы