Показать полную графическую версию : [решено] Массивы
Доброго времени суток. Как можно реализовать след. алгоритм работы скрипта:
Чтение строк из "in1.txt", сравнение с частью каждой строки до разделителя файла "db.txt", который представляет из себя два столбца с разделителями (наверное проще будет разделить файл db.txt на два файла и проводить ассоциацию от номеров строк); если строка из "in1.txt" совпадает с частью строки до разделителя из файла "db.txt", то часть этой строки ПОСЛЕ разделителя (или строка с тем же номером второй части файла db.txt, если его делить) записывается в переменную, после чего к ней применяется действие.
Набрел на эту тему (http://forum.oszone.net/post-1886306.html), но примеров для себя я не увидел.
DOCznet, для начала упакуйте файлы «in1.txt» и «db.txt» в архив, который приложите к сообщению. Затем попробуйте более внятно, возможно, с примерами, описать, что нужно получить.
Ок:
В одном активно использующемся батнике есть строчка:
powershell "Get-WmiObject -Class Win32_Printer -ComputerName localhost | select name | out-file -encoding default "Q:\%USERNAME%\printer$.txt""
Выходной файл "Q:\%USERNAME%\printer$.txt"" и есть in1.txt; вводные данные.
Файл db.txt - таблица соответствий принтеров - только названия: первая колонка - имена принтеров старого принт-сервера, вторая колонка - имена принтеро нового принт-сервера, именуемые иначе, но физически являющиеся теми же самыми устройствами.
Каждую строчку из вводных данных (in1.txt) мы сравниваем с каждой строкой из первой колонки файла соответствий и при совпадении мы записываем в переменную значение второй колонки из той же строки, в которой произошло совпадение со значением из первой колонки, и выполняем действие при каждом совпадении:
explorer.exe "\\print-server.corp.ru\%var%"
То что существуют политики, подключающие принтеры пользователям - знаем, просто на том уровне на котором мне приходится выполнять свою часть задач - до функционала GPO мне не дотянуться.
упакуйте файлы «in1.txt» и «db.txt» в архив, который приложите к сообщению. »
DOCznet, почему в «db.txt» наличествуют дубликаты по первому полю, конкретно — «HP4015_OKO2»?
Пример кода на PowerShell:
$hNames = @{}
Get-Content -Path "C:\Песочница\041\arch\db.txt" |`
ForEach-Object -Process {
$aNames = $_ -split "`t"
if(-not $hNames.ContainsKey($aNames[0])) {
$hNames.Add($aNames[0], $aNames[1])
}
}
Get-WmiObject -Class Win32_Printer |`
ForEach-Object -Process {
if($hNames.Contains($_.Name)) {
$sVar = $hNames.Item($_.Name)
Write-Host $sVar
Start-Process -FilePath "$env:systemroot\explorer.exe" -ArgumentList "\\print-server.corp.ru\$sVar"
}
}
DOCznet, то или не то: @for /f "tokens=1,2" %%i in (db.txt) do @(findstr %%i in1.txt>nul&& echo explorer \\print-server.corp.ru\%%j)???
Если то, то уберите "echo".
Тогда правильно должно быть так:
Код:
@for /f "tokens=1,2" %%i in (db.txt) do @(findstr %%i in1.txt>nul&& echo explorer \\print-server.corp.ru\%%j)
. »
О.о Элегантно! Не ожидал, что в одну строчку уложится решение, спасибо! :)
Еще вопрос - некоторые принтеры в именах содержат пробелы (в первой колонке db.txt), можно как-то сделать, что бы они не считались за разделитель? Конечно не критично, т.к. таких принтеров по пальцам пересчитать.
Пробовал "tokens=1,2 delims= " не вышло.
DOCznet, почему в «db.txt» наличествуют дубликаты по первому полю, конкретно — «HP4015_OKO2»?
Пример кода на PowerShell: »
Спасибо! С PowerShell'ом, правда, еще не особо знаком + дополнительно включать нужно на каждой машинке.
Еще вопрос - некоторые принтеры в именах содержат пробелы (в первой колонке 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)???
А так:
Код:
@for /f "tokens=1,2 delims= " %%i in (db.txt) do @(findstr /c:"%%i" in1.txt>nul&& echo explorer \\print-server.corp.ru\%%j)
??? »
То что надо. Еще раз большое спасибо!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.