Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   сравнение данных и вывод в переменную (http://forum.oszone.net/showthread.php?t=301009)

Anufriev 10-06-2015 14:23 2517016

сравнение данных и вывод в переменную
 
Добрый день!

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

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

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

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

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

Elven 10-06-2015 17:44 2517095

А какую часть непонятно как решать?
В начале фигачим сопоставление
например так*
Код:

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 2517138

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

согласен, тоже подумал, что удобней будет сделать второй файл, но пользователей штук 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. как раз на вот этой части у меня сегодня и произошел затык

Iska 10-06-2015 20:59 2517166

Цитата:

Цитата Anufriev
странно, но почему то говорит "Непредвиденное появление: eql", »

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

Цитата:

Цитата Anufriev
но cmd выдает такое, как будто переменную не берет из файла... »

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

Anufriev 10-06-2015 21:15 2517169

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

Скрытый текст
Код:

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 22:00 2517180

я глупец, если в список добавить несколько пользователей, то получается так, что он в любом случае берет последнего из списка...
Скрытый текст
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 2517190

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

Iska 10-06-2015 23:07 2517192

Цитата:

Цитата Anufriev
p.s. что-то «equ» вообще в справочнике не нашел, »

Код:

if /?
Цитата:

Код:

где оператор_сравнения принимает следующие значения:

    EQL - равно
    NEQ - не равно
    LSS - меньше
    LEQ - меньше или равно
    GTR - больше
    GEQ - больше или равно,


Эта ошибка была в Windows XP, осталась и в Windows 7.

Цитата:

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

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

Anufriev 10-06-2015 23:25 2517201

Вложений: 1
Список логинов прикрепил

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

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

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

Anufriev 11-06-2015 11:02 2517328

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

если использовать батник в таком виде, он работает прекрасно, но не подходит моему списку, нужно у переменной %%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


Время: 00:27.

Время: 00:27.
© OSzone.net 2001-