我很难写一个简单的批处理文件作为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 012保存所得到的图像 我目前最好的非工作代码为:
$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”来处理特殊字符pathes。但是我仍然无法将批处理转换为Powershell脚本,因为 Set-Content(和Out-File方法)似乎与旧批处理管道(“>”)相比工作不同。无论我使用哪种编码,结果图像都不可见。 help file from above表示exiftool使用UTF8编码。
当然,我尝试了其他available encodings,但他们都没有产生可视图像。我被困在这一点上。所以我最初的问题仍然部分地“如何将此批处理文件转换为PowerShell”。
那么,为什么使用旧的批处理命令时它工作?
例如:创建一个文件夹“D:文件夹”,并将其放置在其中。
从上面下载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
经过测试。给“WriteAllBytes”键入“System.Byte []”提供错误“无法转换参数1”,值为“System.Object []”:“无法转换值”“键入”System .Byte“。错误:”输入字符串格式不正确。“”'如果您需要测试,请使用[示例MP3](http://ge.tt/4PUs8hY/v/1)。 – nixda 2013-02-17 13:27:01
@nixda谢谢你的mp3例子。我找到了一个替代方案,在我的答案中添加了代码。 – 2013-02-17 15:54:51
关闭一个。在“a [1]”»“a [1]”中插入一个空格,它将不起作用。我想这些变量需要用双引号括起来。但是如何? – nixda 2013-02-17 17:04:59