PDA

Показать полную графическую версию : [решено] Переменная в переменной)


alexx_core
02-07-2018, 15:09
Здравствуйте!)

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

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


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
set prefix-aa-comp-name1=123 »
это что, собрано самостоятельно? Значения откуда взяты? Это уже задано или пример? Если пример, то подробно расшифруйте где что.

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

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

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




по-мойму, тебе нужен 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
ЯННП , так чтоле

@echo on
setlocal EnableDelayedExpansion

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

pause
exit




походу, вот тут были такие ж муки рождения :) CMD/BAT - двойное раскрытие (http://forum.oszone.net/thread-237245.html)

Iska
03-07-2018, 16:24
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
ЯННП , так чтоле


@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
Оно!!! »
Токмо call там уже совершенно излишне.

x0r
03-07-2018, 18:08
ага, без call тоже норм.

YuS_2
03-07-2018, 18:23
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
ЕЯПП , то данный пример был укороченный, дабы передать суть вопроса, которую не могли понять отвечающие. А у самого TS это все будет крутиццо в скрипте в каком-то цикле, чтоле... читать из файла, хз. http://www.kolobok.us/smiles/icq/smile.gif

Iska
03-07-2018, 19:08
А я вот не понял совсем, »
«Третьим будешь?» ;)
короче ничего непонятно пока ... »
Я тоже ничего не смог понять »

YuS_2
03-07-2018, 20:01
«Третьим будешь?» »
Это да, телепатию развивать надо, однако! :)

alexx_core
04-07-2018, 11:53
Попробую объяснить.))
Есть более 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


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

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




© OSzone.net 2001-2012