![]() |
Массивы
Доброго времени суток. Как можно реализовать след. алгоритм работы скрипта:
Чтение строк из "in1.txt", сравнение с частью каждой строки до разделителя файла "db.txt", который представляет из себя два столбца с разделителями (наверное проще будет разделить файл db.txt на два файла и проводить ассоциацию от номеров строк); если строка из "in1.txt" совпадает с частью строки до разделителя из файла "db.txt", то часть этой строки ПОСЛЕ разделителя (или строка с тем же номером второй части файла db.txt, если его делить) записывается в переменную, после чего к ней применяется действие. Набрел на эту тему, но примеров для себя я не увидел. |
DOCznet, для начала упакуйте файлы «in1.txt» и «db.txt» в архив, который приложите к сообщению. Затем попробуйте более внятно, возможно, с примерами, описать, что нужно получить.
|
Ок:
В одном активно использующемся батнике есть строчка: Код:
powershell "Get-WmiObject -Class Win32_Printer -ComputerName localhost | select name | out-file -encoding default "Q:\%USERNAME%\printer$.txt"" Файл db.txt - таблица соответствий принтеров - только названия: первая колонка - имена принтеров старого принт-сервера, вторая колонка - имена принтеро нового принт-сервера, именуемые иначе, но физически являющиеся теми же самыми устройствами. Каждую строчку из вводных данных (in1.txt) мы сравниваем с каждой строкой из первой колонки файла соответствий и при совпадении мы записываем в переменную значение второй колонки из той же строки, в которой произошло совпадение со значением из первой колонки, и выполняем действие при каждом совпадении: explorer.exe "\\print-server.corp.ru\%var%" То что существуют политики, подключающие принтеры пользователям - знаем, просто на том уровне на котором мне приходится выполнять свою часть задач - до функционала GPO мне не дотянуться. |
Цитата:
|
Вложений: 1
|
DOCznet, почему в «db.txt» наличествуют дубликаты по первому полю, конкретно — «HP4015_OKO2»?
Пример кода на PowerShell: |
DOCznet, то или не то:
Код:
@for /f "tokens=1,2" %%i in (db.txt) do @(findstr %%i in1.txt>nul&& echo explorer \\print-server.corp.ru\%%j) Если то, то уберите "echo". |
Цитата:
О.о Элегантно! Не ожидал, что в одну строчку уложится решение, спасибо! :) Еще вопрос - некоторые принтеры в именах содержат пробелы (в первой колонке db.txt), можно как-то сделать, что бы они не считались за разделитель? Конечно не критично, т.к. таких принтеров по пальцам пересчитать. Пробовал Код:
"tokens=1,2 delims= " Цитата:
|
Цитата:
А так: Код:
@for /f "tokens=1,2 delims= " %%i in (db.txt) do @(findstr /c:"%%i" in1.txt>nul&& echo explorer \\print-server.corp.ru\%%j) |
Цитата:
То что надо. Еще раз большое спасибо! |
Время: 08:43. |
Время: 08:43.
© OSzone.net 2001-