Мне тяжело писать простой командный файл в качестве сценария powershell.Преобразование командного файла в powershell со специальными символами в пути
Рассмотрите эту структуру папок. Обратите внимание на каталог с ней в прохладном [1]
...
exiftool.exe
ли команда утилита (например) изображений из встроенных тегов MP3 извлечения.
I uploaded its help если вам нужна дополнительная информация.
oldscript.cmd
exiftool -picture -b input.mp3 > output.jpg
Эта линия является одним писать в PowerShell. Я нашел синтаксис в forum post от автора
-picture
обозначает тег для извлечения и-b
обозначает двоичный режимinput.mp3
мой тест mp3, который может содержать специальные символы на своем пути, как [и]> output.jpg
определяет имя и сохраняет полученное изображение в той же папке
newscript.ps1
Мой лучший текущий нерабочим код:
$ownpath = Split-Path $MyInvocation.MyCommand.Path
$exe = $ownpath + '\exiftool.exe'
$input = $ownpath + '\input.mp3'
$outimg = $ownpath + '\output.jpg'
& $exe -picture -binary $input| Set-Content -literalPath $outimg -encoding UTF8
Я нашел Set-Content
, который способен обрабатывать специальные символы в трактах через «-LiteralPath». Но я все еще не могу преобразовать пакет в сценарий Powershell, потому что Set-Content (и Out-File method) тоже работает по сравнению со старым пакетным конвейером («>»). Полученное изображение не может быть просмотрено независимо от того, какую кодировку я использую. help file from above говорит, что exiftool использует кодировку UTF8.
Конечно, я пробовал другие available encodings, но все они не смогли создать видимое изображение. Я застрял в этом вопросе. Поэтому мой первоначальный вопрос по-прежнему стоит частично «Как преобразовать этот командный файл в powershell».
Так почему это работает при использовании старой команды партии?
Например: создать папку «D: папка» и поместить в нее MP3 file with a cover image.
Загрузите exiftool.exe сверху и разместите его там.
старая команда партия будет работать и даст вам видимое изображение
D:\folder\exiftool -picture -binary D:\folder\input.mp3 > D:\folder\output.jpg
Новый скрипт Powershell V2 с тем же синтаксисом, потерпит неудачу. Зачем?
& D:\folder\exiftool.exe -picture -binary D:\folder\input.mp3 > D:\folder\output.jpg
Протестировано. Дает ошибку 'Невозможно преобразовать аргумент« 1 »со значением:« System.Object [] », для« WriteAllBytes »введите« System.Byte [] »:« Невозможно преобразовать значение »╪ α JFIF █ ä», чтобы ввести «Система .Byte ". Ошибка:« Строка ввода не была в правильном формате ».« Вот вам [пример MP3] (http://ge.tt/4PUs8hY/v/1), если вам нужно его протестировать. – nixda
@nixda Спасибо за mp3. Я нашел альтернативу, добавленный код в свой ответ. –
Закрыть один. Вставьте пробел в "a [1]" »" a [1] ", и это не сработает. Я думаю, что переменные должны быть заключены в двойные кавычки. Но как? – nixda