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

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

Ответить
Настройки темы
CMD/BAT - сравнение данных и вывод в переменную

Пользователь


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

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


Изменения
Автор: Anufriev
Дата: 10-06-2015
Добрый день!

появилась ещё одна задачка, часть которой я не знаю как решить, практически молю о помощи

необходимый фрагмент:

есть список с логинами пользователей, построчный, формат логина - PetrovAV

необходимо: что бы батник взял %username% и отрезать ему первый символ (APetrov), далее взял логин из списка и отрезал 2 последних символа, сравнил их и в случае совпадения, взял в переменную логин из списка (перебирать должен до совпадения или до конца списка)

и есть одно "но", есть несколько пользователей у которых %userprofile% не связан с фамилией, например (GBUH), а логин SemenovaAS, эти соответствия должны быть жестко прописаны и проверены в первую очередь.

Отправлено: 14:23, 10-06-2015

 

Аватара для Elven

Ветеран


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

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


А какую часть непонятно как решать?
В начале фигачим сопоставление
например так*
Код: Выделить весь код
if /i %username% eql GBUH (
set i=semenova
echo %%i
)
Дальше перебираем имеющийся файл
Код: Выделить весь код
for /F "delims=" %%a (username_list.txt) do (
if /i %username:~1% eql %a:~0,-2% (
set i=%a:~0,-2%
echo %%i
)
)
з.ы. ничего не проверял, писал просто в общих чертах пардоньте, уже домой собираюсь.

*Если таких пользователей немного проще написать несколько IF'ов в самом батнике, если много - лучше сделать через еще один файл где все это будет сопоставлено, соответственно будет выглядеть несколько сложнее
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:44, 10-06-2015 | #2



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

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


Пользователь


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

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


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

согласен, тоже подумал, что удобней будет сделать второй файл, но пользователей штук 5 таких, так что можно и в батнике оставить.

p.s. плохо не знать, а ещё и забыть...

1 часть, странно, но почему то говорит "Непредвиденное появление: eql", помогла замена на "==", ну и переменная %%i не подходит, должна быть %i%

заметно, что домой собирались, вдвойне благодарю, что уделили мне время

2 часть, наверно правильней было бы так:
Скрытый текст
Код: Выделить весь код
for /f "usebackq delims=" %%a in ("C:\Users\user\Desktop\folder\user.list") do (
if /i %username:~1% == %a:~0,-2% (
set i=%a:~0,-2%
echo %i%
)
)


но cmd выдает такое, как будто переменную не берет из файла...
Скрытый текст
C:\Users\user\Desktop\folder>for /F "usebackq delims=" %a in ("C:\Users\user\Desktop\folder\user.list") do (
if /I ser == ~0 -2 (
set i=~0,-2
echo ~0,-2
)

C:\Users\user\Desktop\folder>(
if /I ser == ~0 -2 (
set i=~0,-2
echo ~0,-2
)
~0,-2

но если заменить "%a:~0,-2%" на %%a он видит текст из файла, нужно понять, почему он не пилит переменную из списка

p.s.s. как раз на вот этой части у меня сегодня и произошел затык

Последний раз редактировалось Anufriev, 10-06-2015 в 20:54.


Отправлено: 19:36, 10-06-2015 | #3


Ветеран


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

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


Цитата Anufriev:
странно, но почему то говорит "Непредвиденное появление: eql", »
Потому что должно быть «equ» (несмотря на то, что в справке написано «eql»).

Цитата Anufriev:
но cmd выдает такое, как будто переменную не берет из файла... »
Потому что внутри скобок раскрытие переменных окружения происходит на момент входа в скобки. Посему надо вместо «%i%» использовать либо отложенное раскрытие переменой окружения, либо двойное раскрытие по «call».
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:59, 10-06-2015 | #4


Пользователь


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

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


во, в таком виде заработало

Скрытый текст
Код: Выделить весь код
for /f "usebackq delims=" %%a in ("C:\Users\user\Desktop\folder\user.list") do (
set i=%%a
if /i %username:~1% == %i:~0,-2% (
echo %i%
)
)


Цитата Iska:
Потому что внутри скобок раскрытие переменных окружения происходит на момент входа в скобки. Посему надо вместо «%i%» использовать либо отложенное раскрытие переменой окружения, либо двойное раскрытие по «call». »
огромное спасибо за информацию

Цитата Iska:
Потому что должно быть «equ» (несмотря на то, что в справке написано «eql»). »
забавно, ни за что бы не догадался

p.s. что-то «equ» вообще в справочнике не нашел, но реально работает интересно, а мелкософт об этом знает?

Последний раз редактировалось Anufriev, 10-06-2015 в 21:26.


Отправлено: 21:15, 10-06-2015 | #5


Пользователь


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

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


я глупец, если в список добавить несколько пользователей, то получается так, что он в любом случае берет последнего из списка...
Скрытый текст
C:\Users\user\Desktop\folder>for /F "usebackq delims=" %a in ("C:\Users\user\Desktop\folder\user.list") do (
set u=%a
if /I ser == FEcd (echo FEcdlk )
)

C:\Users\user\Desktop\folder>(
set u=Pfdas
if /I ser == FEcd (echo FEcdlk )
)

C:\Users\user\Desktop\folder>(
set u=DFFff
if /I ser == FEcd (echo FEcdlk )
)

C:\Users\user\Desktop\folder>(
set u=serTA
if /I ser == FEcd (echo FEcdlk )
)

C:\Users\user\Desktop\folder>(
set u=FEcdlk
if /I ser == FEcd (echo FEcdlk )


вот вид батника:
Скрытый текст
Код: Выделить весь код
for /f "usebackq delims=" %%a in ("C:\Users\user\Desktop\folder\user.list") do (
set u=%%a
if /i %username:~1% == %u:~0,-2% (
echo %u%
)
)

Отправлено: 22:00, 10-06-2015 | #6


Пользователь


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

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


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

Отправлено: 22:59, 10-06-2015 | #7


Ветеран


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

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


Цитата Anufriev:
p.s. что-то «equ» вообще в справочнике не нашел, »
Код: Выделить весь код
if /?
Цитата:
Код: Выделить весь код
где оператор_сравнения принимает следующие значения:

    EQL - равно
    NEQ - не равно
    LSS - меньше
    LEQ - меньше или равно
    GTR - больше
    GEQ - больше или равно,
Эта ошибка была в Windows XP, осталась и в Windows 7.

Цитата Anufriev:
Уважаемы Iska, помогите, пожалуйста, я потерялся... я просто тупо сижу смотрю и не представляю, что можно сделать... »
Мне непонятно, что Вам нужно. Возможно, могли бы помочь пониманию образцы-примеры списков, упакованные в архив, каковой прикреплён к сообщению, либо выложен на RGhost.

Отправлено: 23:07, 10-06-2015 | #8


Пользователь


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

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


Вложения
Тип файла: rar user.rar
(103 байт, 1 просмотров)

Список логинов прикрепил

ситуация какая, доменные учетные записи выглядят в таком виде "TPetrov, SSokolov, EMironov", а учетная запись другого домена как в файле

нужно подключить каждому пользователю сетевой диск из другого домена под его учеткой другого домена,

в моем понимании решение проблемы, это оставить фамилию учеток обоих доменов и их сравнить, в случае совпадения взять учетную запись из списка, и под ней подключить сетевой диск

Отправлено: 23:25, 10-06-2015 | #9


Пользователь


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

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


прошу прощение, за вчерашнюю панику

если использовать батник в таком виде, он работает прекрасно, но не подходит моему списку, нужно у переменной %%a обрезать два последних символа, как это сделать не понимаю?

Скрытый текст
Код: Выделить весь код
for /F "delims=" %%a in (d:\testbat\test\user.list) do (
		if /i %username:~1% == %%a (
		net use K: \\rte.local.sdf.corp\CFT NFLAsd /user:%%a@local.sdf.corp
		) else echo net
)


если же я использую %a:~0,-2% вместо %%a

Скрытый текст
Код: Выделить весь код
for /F "delims=" %%a in (d:\testbat\CFT\user.list) do (
		if /i %username:~1% == %a:~0,-2% (
		net use K: \\rte.local.sdf.corp\CFT NFLAsd /user:%%a@local.sdf.corp
		) else echo net
)


то получаю Непредвиденное появление: else.

Скрытый текст
D:\testbat\test>netuse.bat
Непредвиденное появление: else.
D:\testbat\test> ) else echo net

Последний раз редактировалось Anufriev, 11-06-2015 в 13:51.


Отправлено: 11:02, 11-06-2015 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Система - Вывод даты в переменную (bat) rootheaven Скриптовые языки администрирования Windows 6 23-07-2017 20:21
CMD/BAT - Как в .bat файле сделать вывод результата выполнения в переменную?? Eugene Shugaev Скриптовые языки администрирования Windows 1 12-03-2014 13:39
CMD/BAT - [решено] Сравнение txt файлов и вывод результата LAKERS824 Скриптовые языки администрирования Windows 2 08-07-2012 12:48
CMD/BAT - [решено] Ввод данных в переменную из txt-файла river123 Скриптовые языки администрирования Windows 1 10-01-2011 18:43
MSFT SQL Server - ошибка типа данных (tinyint и text) при записи содержимого поля в переменную Vi-P Программирование и базы данных 14 11-12-2008 01:14




 
Переход