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

Аватара пользователя
9119

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

Сообщение 9119 »

Добрый.





Код:

Код: Выделить всё

$text = "Проверка"
$text | cmd

результат:



Код:

Код: Выделить всё

 ????????



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



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





Нашел что-то -
https://xaegr.wordpress.com/2007/01/24/decoder/


но не разобрался как пользоваться.



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

Re: PowerShell - перекодировка значения переменной с рус. буквами в DOS-кодировку, для передачи в cmd.

Сообщение Iska »

нужно запустить приложение с большим количеством аргументов из-под 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, но затыка с кодировкой.
Аватара пользователя
Iska

Re: PowerShell - перекодировка значения переменной с рус. буквами в DOS-кодировку, для передачи в cmd.

Сообщение Iska »

нужно запустить приложение с большим количеством аргументов из-под 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, но затыка с кодировкой.
Аватара пользователя
Iska

Re: PowerShell - перекодировка значения переменной с рус. буквами в DOS-кодировку, для передачи в cmd.

Сообщение Iska »

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
Аватара пользователя
9119

Re: PowerShell - перекодировка значения переменной с рус. буквами в DOS-кодировку, для передачи в cmd.

Сообщение 9119 »

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"

но к сожалению также
Аватара пользователя
Foreigner

Re: PowerShell - перекодировка значения переменной с рус. буквами в DOS-кодировку, для передачи в cmd.

Сообщение Foreigner »

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

Re: PowerShell - перекодировка значения переменной с рус. буквами в DOS-кодировку, для передачи в cmd.

Сообщение Foreigner »

У меня вот так работает прямо из PS:



Код:

Код: Выделить всё

$text = "надо решить задачу с текущими длинными путями и русскими буквами"
& "D:\Downloads\balcon\balcon.exe" -n Irina -t $text

Зачем делать столько переменных-то? Тем более, зачем делать массив из аргументов, они же должны в одну строку идти.

И сами аргументы тоже пересмотреть надо, например, -l выводит список голосов, зачем это?



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

Re: PowerShell - перекодировка значения переменной с рус. буквами в DOS-кодировку, для передачи в cmd.

Сообщение DJ Mogarych »

У меня вот так работает прямо из PS:



Код:

Код: Выделить всё

$text = "надо решить задачу с текущими длинными путями и русскими буквами"
& "D:\Downloads\balcon\balcon.exe" -n Irina -t $text

Зачем делать столько переменных-то? Тем более, зачем делать массив из аргументов, они же должны в одну строку идти.

И сами аргументы тоже пересмотреть надо, например, -l выводит список голосов, зачем это?



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

Вернуться в «Скриптовые языки администрирования Windows»