Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Поженить cmd/bat и powershell

Ответить
Настройки темы
CMD/BAT - Поженить cmd/bat и powershell

Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


Оказалос, что моему cmd-скрипту надо читать csv, присваивать прочитанное переменным и работать далее с этим.
Но все поиски говорят о том, что нормально работать с CSV из батника не получится. Надо powershell +

Собствоенно вопрос:
Можно ли как- то именно в CMD/BAT скрипте пройти по каждой строке SCV файлика и Прочитать значения в переменные, чтобы дальше с ними пошуршать?

То есть вызывать powershell -command Import-Csv... И результат рсскладывать в переменные...

Отправлено: 04:00, 21-02-2023

 

Старожил


Сообщения: 250
Благодарности: 51

Профиль | Отправить PM | Цитировать


на такое рацпредложение даже мата жалко

Отправлено: 07:11, 21-02-2023 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 2733
Благодарности: 1698

Профиль | Отправить PM | Цитировать


msvrd, чтобы о чем‐ то рассуждать, надо иметь образец файла csv и понимать, почему с Вашими файлами csv не получится работать в cmd.?
Что конкретно надо присваивать переменным и что дальше с ними происходит.?
Если в полях не содержатся какие‐либо особенные для cmd символы, нет проблем, а если содержатся ‐ то каким образом Вы хотите такие строки иметь в переменных?
Приложите к сообщению файл. Как вариант, есть возможность совместить cmd и js.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 21-02-2023 в 07:52.


Отправлено: 07:41, 21-02-2023 | #3


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6672
Благодарности: 1558

Профиль | Отправить PM | Цитировать


msvrd, наверное, можно, но зачем? Powershell не кусается.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 08:39, 21-02-2023 | #4


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1231
Благодарности: 515

Профиль | Отправить PM | Цитировать


Ну и я свои 5 копеек заброшу...
Цитата msvrd:
Можно ли как- то именно в CMD/BAT скрипте пройти по каждой строке SCV файлика и Прочитать значения в переменные, чтобы дальше с ними пошуршать? »
Легко.
Вопрос только в целесообразности, которая определяется самой задачей в целом. Возможно и cmd (статичный, малофункциональный и умирающий инструмент) не понадобится вовсе...

-------
scio me nihil scire. Ѫ


Отправлено: 09:22, 21-02-2023 | #5


Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить 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
Благодарности: 0

Профиль | Отправить PM | Цитировать


В общем-то у меня сейчас не самое элегантное, но решение есть.
Просто через for /f "usebackq tokens=1-8 delims=^:"
Потом собираю нужный из четырёх токенов. Работает, но если чего в структуре csv поменяетя (например не будет логин:пароль) — всё сломается

Отправлено: 05:12, 23-02-2023 | #7


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1231
Благодарности: 515

Профиль | Отправить PM | Цитировать


Цитата msvrd:
главная проблема в том, что разделитель «:» встречается не только в виде разделителя »
Это не проблема, если, конечно, все "ненужные" разделители находятся внутри кавычек, как указано в Вашем примере.

Цитата msvrd:
Записи в этом CSV постоянно меняются записи. Одни удаляются, другие добавляются. »
Вопрос в том, как именно они там появляются и исчезают...
Если вручную редактируются, то возможны привнесенные ошибки в структуру файла, а их исправить автоматически, наверное, практически нереально...
Цитата msvrd:
И вот всем этим «пользователям» надо переодически менять PROXY да так, чтобы они не повторялись.
То есть Задача 1 — раздать всем разное. Довольно простая.
Есть отдельный файлик со списком прокси типа proxy.txt, ищем какие строки из него уже содержатся в CSV. Остальные можор «раздавать» новым. »
Тут бы задачу поточнее сформулировать.
1. Существующие записи удалять надо все или по каким-либо критериям?
2. Раздать всем разное - в принципе, реализуемо, но тут необходимо прояснить вопрос соответствия количества записей в списке пользователей и в файле со списком прокси... хватит ли записей на всех, чтобы выполнить условие "всем разное"?
3. Какой формат записей и кодировка этого файла proxy.txt?
4. Зависит от ответа на п.3 ... Соответствует ли login:password для прокси, записи конкретного пользователя USER:PASSWORD или это разные данные?

Цитата msvrd:
Ровно как и понимания как бы этот финт провернуть без переписания всего кода на ps. »
powershell легко вызывается из cmd для выполнения конкретного скрипта, так:
Код: Выделить весь код
powershell -ex bypass -f ".\script.ps1"
т.е. запускается сеанс powershell, выполняется скрипт powershell, а далее продолжится выполнение сценария cmd

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:54, 23-02-2023 | #8


Ветеран


Contributor


Сообщения: 2733
Благодарности: 1698

Профиль | Отправить 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 для отладки
Код: Выделить весь код
USER:PASSWORD:PROXY:MAIL
user1:password1:"https://login:password@host:port1":mail1@google.com
user2:password1:"https://login:password@host:port2":mail1@google.com
user3:password1:"https://login:password@host:port3":mail1@google.com

Остальные хотелки требуют конкретных образцов файлов.
Не надо навязывать свой способ решения. Лучше подробно формулируйте задачу: что имеем (примеры файлов) что хотим получить (пример файла). Очень желательно файлы приложить.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 23-02-2023 в 12:06.


Отправлено: 10:23, 23-02-2023 | #9


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1231
Благодарности: 515

Профиль | Отправить PM | Цитировать


Цитата msvrd:
но если чего в структуре csv поменяетя (например не будет логин:пароль) — всё сломается »
Изучайте powershell, он ничего не сломает...

Вот, примерное решение (если уточните задачу, ответив на поставленные выше вопросы, то код, возможно, придется изменить):
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

-------
scio me nihil scire. Ѫ


Отправлено: 12:59, 23-02-2023 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Поженить cmd/bat и powershell

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход