Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Переменная в переменной) (http://forum.oszone.net/showthread.php?t=335563)

alexx_core 02-07-2018 15:09 2820300

Переменная в переменной)
 
Здравствуйте!)

Столкнулся с проблемой такого плана. Нужно составить имя переменной из нескольких переменных.

Имеем переменные (имя пользователя) хранящие данные (пароль)

Код:

set prefix-aa-comp-name1=123
set prefix-aa-comp-name2=321
set prefix-aa-comp-name3=213

От имени компьютера требуется отделить префикс, имя компьютера и составить имя пользователя

Код:

rem Отделяю префикс
set xx=%computername:˜0,3%

rem Отделяю имя компа

set yy=%computername:˜8,-2%

rem Составляю переменную передаю ее значение в переменную %pass%

call set pass=%aa-%xx%-%yy%%

Все шикарно когда call set pass=%%aa-%xx%-%yy%% выполняю в консоли, в переменную %pass% попадает содержимое переменной prefix-aa-comp-name1, но когда выполняю bat фаил в переменную попадает имя переменной. Поскажите, куда копать.)))

alpap 02-07-2018 17:56 2820323

Цитата:

Цитата alexx_core
set prefix-aa-comp-name1=123 »

это что, собрано самостоятельно? Значения откуда взяты? Это уже задано или пример? Если пример, то подробно расшифруйте где что.

Цитата:

Цитата alexx_core
и составить имя пользователя »

Цитата:

Цитата alexx_core
set pass=%aa-%xx%-%yy%% »

в данном случае вижу что из всего вышеперечисленного вы создаете значение для переменной определяющей пароль, поясните ваши деяния
кроме всего прочего, если это действительно пароль, то у каждого свой - правильно, значит
set pass1=***
set pass2=****
так? Но это можно сделать эффективнее,
так примерно:
Код:

@echo off
for /f "tokens=1-4 delims=\-" %%a in ('net view^|find "\"') do set %%d=%%a-%%b-%%c-%%d
echo %name1%
echo %name2%
echo %name3%
pause

(А еще, ничего что пароль будет доступен всем кому не лень заглянуть в bat?)
пока копать действительно нечего - пропасть пробелов.
P.S.
И еще я не понял зачем дерибанить все по "-", если потом все опять соединяется, короче ничего непонятно пока ...

alexx_core 03-07-2018 10:09 2820387

Цитата:

Цитата alpap
Цитата alexx_core:
Код:

set prefix-aa-comp-name1=123 »
это что, собрано самостоятельно? Значения откуда взяты? Это уже задано или пример? Если пример, то подробно расшифруйте где что.
Цитата alexx_core:
и составить имя пользователя »
Цитата alexx_core:
Код:

set pass=%aa-%xx%-%yy%% »
в данном случае вижу что из всего вышеперечисленного вы создаете значение для переменной определяющей пароль, поясните ваши деяния
кроме всего прочего, если это действительно пароль, то у каждого свой - правильно, значит
Код:

set pass1=***
set pass2=****

так? Но это можно сделать эффективнее,
так примерно:
Код:

Код:
@echo off
for /f "tokens=1-4 delims=\-" %%a in ('net view^|find "\"') do set %%d=%%a-%%b-%%c-%%d
echo %name1%
echo %name2%
echo %name3%
pause

(А еще, ничего что пароль будет доступен всем кому не лень заглянуть в bat?)
пока копать действительно нечего - пропасть пробелов.
P.S.
И еще я не понял зачем дерибанить все по "-", если потом все опять соединяется, короче ничего непонятно пока ... »

Спасибо вам за ваш ответ, но вы не поняли вопрос, либо я непонятно выразился. Попробую еще раз.

Есть имена компов созданные по определенной маске prefix-appname-clustername (не я это придумал).
Есть имена пользователей тоже с определенной маской aa-appname-prefix

Теперь относительно имени компа нужно составить имя пользователя и передать пароль и имя пользователя службе.
Зачем мне это, за тем, что настроить нужно кучу компов.))

У меня возникла загвоздка в извлечении значения переменной, которая содержится в другой переменной, именно при выполнении bat фала, когда выполняю последовательно в консоли, все работает.

Код:


Имеем список имен пользователей и паролей
set aa-appname-prefix=123

:: Отделяю префикс
set prefix=%computername:˜0,3%

:: Отделяю appname
set appname=%computername:˜8,-2%

:: Составляю имя пользователя
set usrname=aa-%appname%-prefix

:: Теперь мне нужно, чтоб переменная %username%  передала переменной %pass% пароль
call set pass=%%usrname%%

При последовательном выполнении команд в консоли все прекрасно работает, но при выполнении bat файла
call set pass=%%usrname%% выдает имя пользователя...

И дело здесь не в что, зачем и почему, а именно в том, как вытащить значение переменной, содержащейся в другой переменной.

x0r 03-07-2018 15:11 2820425

по-мойму, тебе нужен for /?
Код:

@echo off
set computername=pref-middle-end

for /f "delims=- tokens=1,2,3" %%A  in ("%computername%") do set new=blah_%%C_%%A_%%B

echo %new%
pause
exit


Iska 03-07-2018 15:45 2820431

alexx_core, Вы о чём-то о своём, о женском, рассуждаете. Я тоже ничего не смог понять в Ваших экзерсисах. Но на кой шут Вы пытаетесь что-то присваивать предопределённой переменной окружения, такой, как username, а? Вот, зачем?! Не делайте так, используйте другое имя переменной окружения.

alexx_core 03-07-2018 15:48 2820433

Цитата:

Цитата Iska
alexx_core, Вы о чём-то о своём, о женском, рассуждаете. Я тоже ничего не смог понять в Ваших экзерсисах. Но на кой шут Вы пытаетесь что-то присваивать предопределённой переменной окружения, такой, как username, а? Вот, зачем?! Не делайте так, используйте другое имя переменной окружения. »

Это просто для примера. У меня переменные другие. Проблема в другом.




Цитата:

Цитата x0r
по-мойму, тебе нужен for /?
Код:

@echo off
set computername=pref-middle-end
for /f "delims=- tokens=1,2,3" %%A in ("%computername%") do set new=blah_%%C_%%A_%%B
echo %new%
pause
exit

»

Ваша конструкция составляет имя пользователя, у меня оно и так прекрасно составляется. Мне нужно из переменной в которая хранится имени другой переменной вытащить значение.

т.е. если упростить, то

Код:

set aa-appname-prefix=123
set usrname=aa-appname-prefix
call set pass=%%usrname%%
echo %pass%
123

Данная конструкция работает если вводить в консоли по командно, но не работает если выполнить bat.


PS: Походу я непонятно объясняю...

x0r 03-07-2018 16:12 2820438

ЯННП , так чтоле
Код:

@echo on
setlocal EnableDelayedExpansion

set aa-appname-prefix=123
set usrname=aa-appname-prefix
call set pass=!%usrname%!
echo !pass!

pause
exit

походу, вот тут были такие ж муки рождения :) CMD/BAT - двойное раскрытие

Iska 03-07-2018 16:24 2820440

Код:

set aa-appname-prefix=123
set usrname=aa-appname-prefix
call set pass=%%%usrname%%%
echo %pass%

или:
Код:

set aa-appname-prefix=123
set usrname=aa-appname-prefix
set pass=%usrname%
call echo %%%pass%%%


alexx_core 03-07-2018 16:28 2820441

Цитата:

Цитата x0r
ЯННП , так чтоле

Код:

@echo on
setlocal EnableDelayedExpansion
set aa-appname-prefix=123
set usrname=aa-appname-prefix
call set pass=!%usrname%!
echo !pass!
pause
exit

»


Оно!!! Спасибо вам!!!

Iska 03-07-2018 17:21 2820450

Цитата:

Цитата alexx_core
Оно!!! »

Токмо call там уже совершенно излишне.

x0r 03-07-2018 18:08 2820453

ага, без call тоже норм.

YuS_2 03-07-2018 18:23 2820460

Цитата:

Цитата alexx_core
set aa-appname-prefix=123
set usrname=aa-appname-prefix
call set pass=%%usrname%%
echo %pass%
»

А я вот не понял совсем, на кой тут вообще такие сложности?
1. Присваиваем значение первой переменной
2. Присваиваем имя первой переменной во вторую переменную
3. Пытаемся сделать двойное раскрытие с присвоением в третью переменную!
А зачем?! В итоге всех действий получаем таки аналог этого:
Код:

echo %aa-appname-prefix%
В чём сакральный смысл этих сложностей? :)

x0r 03-07-2018 18:37 2820463

ЕЯПП , то данный пример был укороченный, дабы передать суть вопроса, которую не могли понять отвечающие. А у самого TS это все будет крутиццо в скрипте в каком-то цикле, чтоле... читать из файла, хз.

Iska 03-07-2018 19:08 2820470

Цитата:

Цитата YuS_2
А я вот не понял совсем, »

«Третьим будешь?» ;)
Цитата:

Цитата alpap
короче ничего непонятно пока ... »

Цитата:

Цитата Iska
Я тоже ничего не смог понять »


YuS_2 03-07-2018 20:01 2820486

Цитата:

Цитата Iska
«Третьим будешь?» »

Это да, телепатию развивать надо, однако! :)

alexx_core 04-07-2018 11:53 2820552

Попробую объяснить.))
Есть более 100 серверов на которых крутятся некие приложения. Требуется их настроить. Один из этапов настройки создание и запуск определенной службы от определенного пользователя. Пользователь для каждого компа индивидуален и создан заранее.

Для настройки запуска службы от определенного пользователя и нужна была эта котовасия.
Я сделал несколько топорно, но работает на ура.)
Я создал переменные из имен пользователей и присвоил им пароли, как значения. Мне нужно, чтоб скрипт автоматом собирал имя пользователя основываясь на имени компьютера и некой доп. информации, которое уже является переменной содержащей пароль и подставлял пароль в выражение.


Код:

@echo on
setlocal EnableDelayedExpansion

set aa-appname-prefix=123    :: Имя пользователя и пароль (таких более ста)


:: Собираю имя пользователя
set prefix=%computername:˜0,3%
set appname=%computername:˜8,-2%

set usrname=aa-%appname%-%prefix%  :: Это собранное имя пользователя
set pass=!%usrname%!  :: Передаю пароль из переменной %usrname% в переменную %pass%
echo !pass!

pause
exit

Данный пример сильно упрощен, но для понимания этого достаточно.

Спасибо всем, кто принимал участие!!


Время: 23:08.

Время: 23:08.
© OSzone.net 2001-