перекодировка значения переменной с рус. буквами в DOS-кодировку, для передачи в cmd.
Добрый.
Код:
$text = "Проверка"
$text | cmd
результат:
Как перекодировать значение переменной (с русскими буквами), чтобы в сmd передавалось правильно, а не "????????"
*нужно запустить приложение, именно через cmd, но из powersshell. В пути запуска есть русские буквы.
Нашел что-то - https://xaegr.wordpress.com/2007/01/24/decoder/
но не разобрался как пользоваться.
Помогите разобраться. Спасибо.
|
9119, опишите Вашу задачу, а не выбранный метод решения.
|
нужно запустить приложение с большим количеством аргументов из-под 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, попробуйте так:
Код:
$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
|
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"
но к сожалению также
|
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"
|
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
Может все таки можно как-то вывести все значение в сmd? »
|
Код:
Start-Process -FilePath cmd.exe -ArgumentList "/c ......" -Wait
|
DJ Mogarych |
15-06-2021 09:32 2960309 |
У меня вот так работает прямо из PS:
Код:
$text = "надо решить задачу с текущими длинными путями и русскими буквами"
& "D:\Downloads\balcon\balcon.exe" -n Irina -t $text
Зачем делать столько переменных-то? Тем более, зачем делать массив из аргументов, они же должны в одну строку идти.
И сами аргументы тоже пересмотреть надо, например, -l выводит список голосов, зачем это?
Сократите по-максимуму количество аргументов и переменных, затем, тестируя каждый шаг, начинайте наращивать их количество. Так вы поймёте, где именно возникает проблема.
|
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()
|
Цитата:
Цитата DJ Mogarych
Тем более, зачем делать массив из аргументов, они же должны в одну строку идти. »
|
Это я сделал, не автор. Так проще разбираться.
Цитата:
Цитата DJ Mogarych
И сами аргументы тоже пересмотреть надо, »
|
Как правило, именно в этом дело. Я бы порылся, но у меня нет «bal4yndx.exe».
Цитата:
Цитата DJ Mogarych
Сократите по-максимуму количество аргументов и переменных, затем, тестируя каждый шаг, начинайте наращивать их количество. Так вы поймёте, где именно возникает проблема. »
|
Я бы ещё предложил пользовать Process Monitor с фильтрами на создание, запуск и завершение процесса — очень помогает отлавливать некорректно или не вполне корректно передаваемые исполняемому файлу аргументы.
|
Время: 22:59.
© OSzone.net 2001-