Показать полную графическую версию : [решено] Переменная в переменной)
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 фаил в переменную попадает имя переменной. Поскажите, куда копать.)))
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%% выдает имя пользователя...
И дело здесь не в что, зачем и почему, а именно в том, как вытащить значение переменной, содержащейся в другой переменной.
по-мойму, тебе нужен 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
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: Походу я непонятно объясняю...
ЯННП , так чтоле
@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)
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
»
Оно!!! Спасибо вам!!!
Оно!!! »
Токмо call там уже совершенно излишне.
set aa-appname-prefix=123
set usrname=aa-appname-prefix
call set pass=%%usrname%%
echo %pass%
»
А я вот не понял совсем, на кой тут вообще такие сложности?
1. Присваиваем значение первой переменной
2. Присваиваем имя первой переменной во вторую переменную
3. Пытаемся сделать двойное раскрытие с присвоением в третью переменную!
А зачем?! В итоге всех действий получаем таки аналог этого:
echo %aa-appname-prefix%
В чём сакральный смысл этих сложностей? :)
ЕЯПП , то данный пример был укороченный, дабы передать суть вопроса, которую не могли понять отвечающие. А у самого TS это все будет крутиццо в скрипте в каком-то цикле, чтоле... читать из файла, хз. http://www.kolobok.us/smiles/icq/smile.gif
А я вот не понял совсем, »
«Третьим будешь?» ;)
короче ничего непонятно пока ... »
Я тоже ничего не смог понять »
«Третьим будешь?» »
Это да, телепатию развивать надо, однако! :)
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC