Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Переменная в переменной)

Ответить
Настройки темы
CMD/BAT - [решено] Переменная в переменной)

Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: alexx_core
Дата: 03-07-2018
Здравствуйте!)

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

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

Код: Выделить весь код
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 фаил в переменную попадает имя переменной. Поскажите, куда копать.)))

Отправлено: 15:09, 02-07-2018

 

Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата 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.
И еще я не понял зачем дерибанить все по "-", если потом все опять соединяется, короче ничего непонятно пока ...

Последний раз редактировалось alpap, 02-07-2018 в 18:04.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:56, 02-07-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата 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%% выдает имя пользователя...

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

Последний раз редактировалось alexx_core, 03-07-2018 в 15:53.


Отправлено: 10:09, 03-07-2018 | #3

x0r x0r вне форума

Забанен


Сообщения: 795
Благодарности: 137

Профиль | Цитировать


по-мойму, тебе нужен 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

Отправлено: 15:11, 03-07-2018 | #4


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


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

Отправлено: 15:45, 03-07-2018 | #5


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата 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: Походу я непонятно объясняю...

Последний раз редактировалось alexx_core, 03-07-2018 в 16:21.


Отправлено: 15:48, 03-07-2018 | #6

x0r x0r вне форума

Забанен


Сообщения: 795
Благодарности: 137

Профиль | Цитировать


ЯННП , так чтоле
Код: Выделить весь код
@echo on
setlocal EnableDelayedExpansion

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

pause
exit
походу, вот тут были такие ж муки рождения CMD/BAT - двойное раскрытие
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:12, 03-07-2018 | #7


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
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%%%

Отправлено: 16:24, 03-07-2018 | #8


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
@echo on
setlocal EnableDelayedExpansion
set aa-appname-prefix=123
set usrname=aa-appname-prefix
call set pass=!%usrname%!
echo !pass!
pause
exit
»

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

Отправлено: 16:28, 03-07-2018 | #9


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата alexx_core:
Оно!!! »
Токмо call там уже совершенно излишне.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:21, 03-07-2018 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Переменная в переменной)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Реализация функций длины переменной, выделение подстроки с параметрами в переменной. NiOl Скриптовые языки администрирования Windows 7 31-01-2019 19:58
CMD/BAT - [решено] Сравнение переменной цикла со строковой переменной NickM Скриптовые языки администрирования Windows 2 17-01-2017 10:28
CMD/BAT - [решено] В переменной содержится имя переменной opravdin Скриптовые языки администрирования Windows 3 28-01-2013 11:11
CMD/BAT - переменная durexx Скриптовые языки администрирования Windows 1 27-08-2011 10:18
CMD/BAT - [решено] Два файла - как одна переменная, переменная - как параметр taravasya Скриптовые языки администрирования Windows 6 16-02-2010 04:49




 
Переход