Показать полную графическую версию : сравнение данных и вывод в переменную
Anufriev
10-06-2015, 14:23
Добрый день!
появилась ещё одна задачка, часть которой я не знаю как решить, практически молю о помощи:)
необходимый фрагмент:
есть список с логинами пользователей, построчный, формат логина - PetrovAV
необходимо: что бы батник взял %username% и отрезать ему первый символ (APetrov), далее взял логин из списка и отрезал 2 последних символа, сравнил их и в случае совпадения, взял в переменную логин из списка (перебирать должен до совпадения или до конца списка)
и есть одно "но", есть несколько пользователей у которых %userprofile% не связан с фамилией, например (GBUH), а логин SemenovaAS, эти соответствия должны быть жестко прописаны и проверены в первую очередь.
А какую часть непонятно как решать?
В начале фигачим сопоставление
например так*
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'ов в самом батнике, если много - лучше сделать через еще один файл где все это будет сопоставлено, соответственно будет выглядеть несколько сложнее
Anufriev
10-06-2015, 19:36
фрагмент не понятный я и выписал:) так что всё что тут описано, я и не могу сообразить как сделать, ну кроме как прочитать список
согласен, тоже подумал, что удобней будет сделать второй файл, но пользователей штук 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. как раз на вот этой части у меня сегодня и произошел затык
странно, но почему то говорит "Непредвиденное появление: eql", »
Потому что должно быть «equ» (несмотря на то, что в справке написано «eql»).
но cmd выдает такое, как будто переменную не берет из файла... »
Потому что внутри скобок раскрытие переменных окружения происходит на момент входа в скобки. Посему надо вместо «%i%» использовать либо отложенное раскрытие переменой окружения, либо двойное раскрытие по «call».
Anufriev
10-06-2015, 21:15
во, в таком виде заработало
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%
)
)
Потому что внутри скобок раскрытие переменных окружения происходит на момент входа в скобки. Посему надо вместо «%i%» использовать либо отложенное раскрытие переменой окружения, либо двойное раскрытие по «call». »
огромное спасибо за информацию
Потому что должно быть «equ» (несмотря на то, что в справке написано «eql»). »
забавно, ни за что бы не догадался:)
p.s. что-то «equ» вообще в справочнике не нашел, но реально работает:) интересно, а мелкософт об этом знает?
Anufriev
10-06-2015, 22:00
я глупец, если в список добавить несколько пользователей, то получается так, что он в любом случае берет последнего из списка...
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%
)
)
Anufriev
10-06-2015, 22:59
Уважаемы Iska, помогите, пожалуйста, я потерялся... я просто тупо сижу смотрю и не представляю, что можно сделать...
p.s. что-то «equ» вообще в справочнике не нашел, »
if /?
где оператор_сравнения принимает следующие значения:
EQL - равно
NEQ - не равно
LSS - меньше
LEQ - меньше или равно
GTR - больше
GEQ - больше или равно,
Эта ошибка была в Windows XP, осталась и в Windows 7.
Уважаемы Iska, помогите, пожалуйста, я потерялся... я просто тупо сижу смотрю и не представляю, что можно сделать... »
Мне непонятно, что Вам нужно. Возможно, могли бы помочь пониманию образцы-примеры списков, упакованные в архив, каковой прикреплён к сообщению, либо выложен на RGhost.
Anufriev
10-06-2015, 23:25
Список логинов прикрепил
ситуация какая, доменные учетные записи выглядят в таком виде "TPetrov, SSokolov, EMironov", а учетная запись другого домена как в файле
нужно подключить каждому пользователю сетевой диск из другого домена под его учеткой другого домена,
в моем понимании решение проблемы, это оставить фамилию учеток обоих доменов и их сравнить, в случае совпадения взять учетную запись из списка, и под ней подключить сетевой диск
Anufriev
11-06-2015, 11:02
прошу прощение, за вчерашнюю панику:)
если использовать батник в таком виде, он работает прекрасно, но не подходит моему списку, нужно у переменной %%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
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.