|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Поженить cmd/bat и powershell |
|
|
CMD/BAT - Поженить cmd/bat и powershell
|
Новый участник Сообщения: 4 |
Оказалос, что моему cmd-скрипту надо читать csv, присваивать прочитанное переменным и работать далее с этим.
Но все поиски говорят о том, что нормально работать с CSV из батника не получится. Надо powershell + Собствоенно вопрос: Можно ли как- то именно в CMD/BAT скрипте пройти по каждой строке SCV файлика и Прочитать значения в переменные, чтобы дальше с ними пошуршать? То есть вызывать powershell -command Import-Csv... И результат рсскладывать в переменные... |
|
Отправлено: 04:00, 21-02-2023 |
Старожил Сообщения: 250
|
Профиль | Отправить PM | Цитировать на такое рацпредложение даже мата жалко
|
Отправлено: 07:11, 21-02-2023 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2733
|
Профиль | Отправить PM | Цитировать msvrd, чтобы о чем‐ то рассуждать, надо иметь образец файла csv и понимать, почему с Вашими файлами csv не получится работать в cmd.?
Что конкретно надо присваивать переменным и что дальше с ними происходит.? Если в полях не содержатся какие‐либо особенные для cmd символы, нет проблем, а если содержатся ‐ то каким образом Вы хотите такие строки иметь в переменных? Приложите к сообщению файл. Как вариант, есть возможность совместить cmd и js. |
------- Последний раз редактировалось megaloman, 21-02-2023 в 07:52. Отправлено: 07:41, 21-02-2023 | #3 |
fascinating rhythm Сообщения: 6672
|
Профиль | Отправить PM | Цитировать msvrd, наверное, можно, но зачем? Powershell не кусается.
|
------- Отправлено: 08:39, 21-02-2023 | #4 |
Crazy Сообщения: 1231
|
Профиль | Отправить PM | Цитировать Ну и я свои 5 копеек заброшу...
![]() Цитата msvrd:
Вопрос только в целесообразности, которая определяется самой задачей в целом. Возможно и cmd (статичный, малофункциональный и умирающий инструмент) не понадобится вовсе... |
||
------- Отправлено: 09:22, 21-02-2023 | #5 |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Со всемми согласен, поясню дополнительно.
Есть уже готовый скрипт на cmd\bat который много разного всего делает. Переписывать это на powershel руки не поднимаются. Одна из задач делать следущее: Есть CSV с данными о пользователях. Заголовками типа USER:PASSWORD:PROXY:MAIL (там больше разного записано, но не суть...) Пример строки: user1:password1:"https://login:password@host:port":mail1@google.com главная проблема в том, что разделитель «:» встречается не только в виде разделителя ![]() Записи в этом CSV постоянно меняются записи. Одни удаляются, другие добавляются. И вот всем этим «пользователям» надо переодически менять PROXY да так, чтобы они не повторялись. То есть Задача 1 — раздать всем разное. Довольно простая. Есть отдельный файлик со списком прокси типа proxy.txt, ищем какие строки из него уже содержатся в CSV. Остальные можор «раздавать» новым. А вот «заменить» текущие не понимаю как без powershell, который умеет корректно разбирать CSV. То есть надо «вырезать» текущие значения PROXY и вставить новые. То есть перём файлик proxy.txt и построчно каждую запись от туда вставляем в каждую строку CSV, заменяя то что там сейчас в PROXY. Идеи кроме как рзббирать CSV внешним posershell запросом, получать обратно в переменную нужное значение PROXY и потом собирать csv-строку заново и записывать у меня нет. Ровно как и понимания как бы этот финт провернуть без переписания всего кода на ps. Может у вас есть? ![]() |
Отправлено: 00:22, 23-02-2023 | #6 |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать В общем-то у меня сейчас не самое элегантное, но решение есть.
Просто через for /f "usebackq tokens=1-8 delims=^:" Потом собираю нужный из четырёх токенов. Работает, но если чего в структуре csv поменяетя (например не будет логин:пароль) — всё сломается ![]() |
Отправлено: 05:12, 23-02-2023 | #7 |
Crazy Сообщения: 1231
|
Профиль | Отправить PM | Цитировать Цитата msvrd:
Цитата msvrd:
![]() Если вручную редактируются, то возможны привнесенные ошибки в структуру файла, а их исправить автоматически, наверное, практически нереально... Цитата msvrd:
1. Существующие записи удалять надо все или по каким-либо критериям? 2. Раздать всем разное - в принципе, реализуемо, но тут необходимо прояснить вопрос соответствия количества записей в списке пользователей и в файле со списком прокси... хватит ли записей на всех, чтобы выполнить условие "всем разное"? 3. Какой формат записей и кодировка этого файла proxy.txt? 4. Зависит от ответа на п.3 ... Соответствует ли login:password для прокси, записи конкретного пользователя USER:PASSWORD или это разные данные? Цитата msvrd:
т.е. запускается сеанс powershell, выполняется скрипт powershell, а далее продолжится выполнение сценария cmd |
||||
------- Отправлено: 08:54, 23-02-2023 | #8 |
Ветеран Сообщения: 2733
|
Профиль | Отправить PM | Цитировать msvrd, Если смысл камлания - вытащить то, что в кавычках
@Echo Off cls Set "FileCSV=Z:\Box_In\file.csv" FOR /F "usebackq delims=" %%i In (`2^>nul More +1 "%FileCSV%"`) DO ( Set "Str=%%i" Call :Parse "Proxy" "%%Str:"=" "%%" Echo. &Echo %%i &Call Echo %%Proxy%% ) pause Exit /B :Parse Set "%~1=%3" Exit /B Файл csv для отладки
Остальные хотелки требуют конкретных образцов файлов. Не надо навязывать свой способ решения. Лучше подробно формулируйте задачу: что имеем (примеры файлов) что хотим получить (пример файла). Очень желательно файлы приложить. |
------- Последний раз редактировалось megaloman, 23-02-2023 в 12:06. Отправлено: 10:23, 23-02-2023 | #9 |
Crazy Сообщения: 1231
|
Профиль | Отправить PM | Цитировать Цитата msvrd:
Вот, примерное решение (если уточните задачу, ответив на поставленные выше вопросы, то код, возможно, придется изменить): script.ps1
$fincsv = '.\in.csv' $foutcsv = '.\out.csv' $fproxy = '.\proxy.txt' $csv = import-csv $fincsv -d ':' $prx = gc $fproxy -enc utf8 $param = @{ Path = $foutcsv Delimiter = ':' Encoding = 'utf8' NoTypeInformation = $true } if ($host.version.major -ge 7){$param += @{UseQuotes='AsNeeded'}} if($prx.count -lt $csv.count){ write-host Количество новых PROXY меньше количества пользователей -for red sleep 5 break } $csv|%{$i,$arr=0,@()}{ $tmp = $_.proxy if ($tmp -notin $prx -or $tmp -in $arr.proxy){ $_.proxy = $prx[$i] $i++ } else { $prx = $prx|?{$_ -ne $tmp} } $arr += $_ }{$arr} |export-csv @param in.csv
USER:PASSWORD:PROXY:MAIL user1:password1:"https://login8:password8@newhost8:newport8":mail1@google.com user2:password2:"https://login2:password2@newhost2:newport2":mail2@google.com user3:password3:"https://login3:password3@host:port":mail3@google.com user4:password4:"https://login1:password1@newhost1:newport1":mail4@google.com user5:password5:"https://login5:password5@host:port":mail5@google.com user6:password6:"https://login6:password6@host:port":mail6@google.com user7:password7:"https://login7:password7@host:port":mail7@google.com user8:password8:"https://login8:password8@host:port":mail8@google.com proxy.txt
https://login1:password1@newhost1:newport1 https://login2:password2@newhost2:newport2 https://login3:password3@newhost3:newport3 https://login4:password4@newhost4:newport4 https://login5:password5@newhost5:newport5 https://login6:password6@newhost6:newport6 https://login7:password7@newhost7:newport7 https://login8:password8@newhost8:newport8 |
|
------- Отправлено: 12:59, 23-02-2023 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
2012 R2 - Powershell по умолчанию вместо cmd | Deppo | Windows Server 2012/2012 R2 | 2 | 28-12-2019 22:35 | |
CMD/BAT - CMD/BAT Поиск по каталогам файлов bat и конвертирование их в JPEG | freerider1989 | Скриптовые языки администрирования Windows | 1 | 18-04-2016 08:37 | |
CMD/BAT - [решено] Powershell вызов из cmd | c4uran | Скриптовые языки администрирования Windows | 7 | 15-09-2015 10:53 | |
CMD/BAT - [решено] CMD/BAT - С помощью bat-ника найти и удалить текст в файле | InVariable | Скриптовые языки администрирования Windows | 4 | 22-05-2015 20:06 | |
Любой язык - [решено] CMD vs PowerShell | exo | Скриптовые языки администрирования Windows | 1 | 18-06-2010 08:45 |
|