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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - перекодировка значения переменной с рус. буквами в DOS-кодировку, для передачи в cmd.

Ответить
Настройки темы
PowerShell - перекодировка значения переменной с рус. буквами в DOS-кодировку, для передачи в cmd.

Старожил


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

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


Изменения
Автор: 9119
Дата: 14-06-2021
Добрый.

Код: Выделить весь код
$text = "Проверка"
$text | cmd
результат:
Код: Выделить весь код
 ????????

Как перекодировать значение переменной (с русскими буквами), чтобы в сmd передавалось правильно, а не "????????"

*нужно запустить приложение, именно через cmd, но из powersshell. В пути запуска есть русские буквы.


Нашел что-то - https://xaegr.wordpress.com/2007/01/24/decoder/
но не разобрался как пользоваться.

Помогите разобраться. Спасибо.

Отправлено: 22:19, 14-06-2021

 

Ветеран


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

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


9119, опишите Вашу задачу, а не выбранный метод решения.

Отправлено: 22:48, 14-06-2021 | #2



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

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


Старожил


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

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


нужно запустить приложение с большим количеством аргументов из-под PS.

Код: Выделить весь код
$tmp1 = "E:\!!Youtube\АРХИВ\!временное\Ролики\!в работе\tmp\1"
$yandex_tts_path = "E:\!!Youtube\АРХИВ\!временное\Ролики\!в работе\проект\bal4yndx"
$yandex_exe = "$yandex_tts_path\bal4yndx.exe"
$api_key_Y = "XXXXXXXXXXXXXXXXXXXXXX"
$Text1 = (get-content -encoding utf8 -path "$tmp1\выкладка.txt")[4..1000]
$alena_voice1 = "-p -k $api_key_Y -l ru-RU -n alena -s 1.0 -t $Text1 -enc utf8 -d $yandex_tts_path\dic.dic -w $tmp1\Book0001.wav"
start-process "$yandex_exe" -arg "$alena_voice1" -wait

из-под PS не стартует, ошибки нет, просто окно блымает от приложения и все, при этом тоже самое из-под сmd - работает без проблем.
*знаю что путь длинный.... и рус буквы. но тут как есть. надо решить задачу с текущими длинными путями и русскими буквами


Вот и хотел собрать весь путь в переменную и послать в сmd, но затыка с кодировкой.

Последний раз редактировалось 9119, 14-06-2021 в 23:28.


Отправлено: 23:04, 14-06-2021 | #3


Ветеран


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

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


9119, попробуйте так:
Код: Выделить весь код
$tmp1            = "E:\!!Youtube\АРХИВ\!временное\Ролики\!в работе\tmp\1"
$yandex_tts_path = "E:\!!Youtube\АРХИВ\!временное\Ролики\!в работе\проект\bal4yndx"
$yandex_exe      = "$yandex_tts_path\bal4yndx.exe"
$api_key_Y       = "XXXXXXXXXXXXXXXXXXXXXX"
$Text1           = (Get-Content -Encoding UTF8 -Path "$tmp1\выкладка.txt")[4..1000]
$alena_voice1    = "-p", "-k", $api_key_Y, "-l", "ru-RU", "-n", "alena", "-s", "1.0", "-t", $Text1, "-enc", "utf8", "-d", "$yandex_tts_path\dic.dic", "-w", "$tmp1\Book0001.wav"

Start-Process -FilePath $yandex_exe -ArgumentList $alena_voice1 -Wait
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:31, 14-06-2021 | #4


Старожил


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

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


Iska,

в вашем варианте поменял аргументы, т.к они идут попарно, кроме -p
Код: Выделить весь код
$alena_voice1    = "-p", "-k $api_key_Y", "-l ru-RU", "-n alena", "-s 1.0", "-t $Text1", "-enc utf8", "-d $yandex_tts_path\dic.dic", "-w $tmp1\Book0001.wav"
но к сожалению также

Отправлено: 23:49, 14-06-2021 | #5


Ветеран


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

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


9119, Попробуйте текст передать в качестве строки (с переводом строки), а не массива строк.

Код: Выделить весь код
$Text1 = (get-content -encoding utf8 -path "$tmp1\выкладка.txt")[4..1000] | Out-String
Или так:
Код: Выделить весь код
$Text1 = (get-content -encoding utf8 -path "$tmp1\выкладка.txt")[4..1000] -join "`n"
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:11, 15-06-2021 | #6


Старожил


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

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


Foreigner, попробовал, также.
даже если через ключ -f указать проге text.txt тотже эффект

Может все таки можно как-то вывести все значение в сmd?

Код: Выделить весь код
"$yandex_exe $alena_voice1"
E:\!!Youtube\АРХИВ\!временное\Ролики\!в работе\проект\bal4yndx\bal4yndx.exe -p -k ключ -l ru-RU -n alena -s 1.0 -t ТЕКСТ РОЛИКА ТЕКСТ РОЛИКА ТЕКСТ РОЛИКА ТЕКСТ РОЛИКА ТЕКСТ РОЛИКА ТЕКСТ РОЛИКА ТЕКСТ РОЛИКА ТЕКСТ РОЛИКА -enc utf8 -d E:\!!Youtube\АРХИВ\!временное\Ролики\!в работе\проект\bal4yndx\dic.dic -w E:\!!Youtube\АРХИВ\!временное\Ролики\!в работе\tmp\1\Book0001.wav
PS E:\!!Youtube\АРХИВ\!временное\Ролики Меган\!в работе\tmp\1>
Код: Выделить весь код
"$yandex_exe $alena_voice1" | cmd
Microsoft Windows [Version 10.0.19042.804]
(c) Корпорация Майкрософт (Microsoft Corporation), 2020. Все права защищены.

E:\!!Youtube\АРХИВ\!временное\Ролики Меган\!в работе\tmp\1>E:\!!Youtube\?????\!?????????\?????? ?????\!? ??????\??????\bal4yndx\bal4yndx.exe -p -k AQVNzlDc64-DyrBNGhq95ANGwwHwFSAEZooHnOiX -l ru-RU -n alena -s 1.0 -t ????? ?????? ????? ?????? ????? ?????? ????? ?????? ????? ?????? ????? ?????? ????? ?????? ????? ?????? -enc utf8 -d E:\!!Youtube\?????\!?????????\?????? ?????\!? ??????\??????\bal4yndx\dic.dic -w E:\!!Youtube\?????\!?????????\?????? ?????\!? ??????\tmp\1\Book0001.wav
"E:\!!Youtube\?????\!?????????\??????" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

Последний раз редактировалось 9119, 18-07-2021 в 16:30.


Отправлено: 00:29, 15-06-2021 | #7


Ветеран


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

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


Цитата 9119:
Может все таки можно как-то вывести все значение в сmd? »
Код: Выделить весь код
Start-Process -FilePath cmd.exe -ArgumentList "/c ......" -Wait
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:59, 15-06-2021 | #8


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

fascinating rhythm


Moderator


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

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


У меня вот так работает прямо из PS:
Код: Выделить весь код
$text = "надо решить задачу с текущими длинными путями и русскими буквами"
& "D:\Downloads\balcon\balcon.exe" -n Irina -t $text
Зачем делать столько переменных-то? Тем более, зачем делать массив из аргументов, они же должны в одну строку идти.
И сами аргументы тоже пересмотреть надо, например, -l выводит список голосов, зачем это?

Сократите по-максимуму количество аргументов и переменных, затем, тестируя каждый шаг, начинайте наращивать их количество. Так вы поймёте, где именно возникает проблема.

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

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

Отправлено: 09:32, 15-06-2021 | #9


Аватара для YuS_2

Crazy


Contributor


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

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


9119, кроме того, использование балаболки принципиально?
Можно и так:
Код: Выделить весь код
add-type -assem system.speech
$file = '.\test.txt'
$wav = '.\out.wav'
$synth = new-object system.speech.synthesis.speechsynthesizer
$synth.setoutputtowavefile($wav)
$synth.speak((gc $file))
$synth.setoutputtodefaultaudiodevice()

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


Отправлено: 14:05, 15-06-2021 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - перекодировка значения переменной с рус. буквами в DOS-кодировку, для передачи в cmd.

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - [решено] Командлет в качестве значения переменной maslinaV Скриптовые языки администрирования Windows 8 25-05-2015 13:05
CMD/BAT - Присвоение значения переменной starav Скриптовые языки администрирования Windows 1 30-05-2013 09:23
Прочие БД - [решено] SQL код триггера для случая передачи (в батник) значения одного поля NecroTYN Программирование и базы данных 1 13-07-2011 06:09
MySQL - Хранение значения переменной в MySQL-базе ManHack Программирование и базы данных 7 11-07-2009 10:02
VBS/WHS/JS - Вывод значения переменной в сообщение la_vanille_ciel Программирование и базы данных 3 09-04-2008 11:55




 
Переход