我将字符串文字传递给我的powershell脚本,如下所示:
var spawn = require("child_process").spawn,
child;
child = spawn("powershell.exe", [
"./scripts/ffmpeg_convert.ps1",
`./cache/videos/${tempFileName + "."}${videoType}`,
` ./cache/converted_videos/${tempFileName + "."}${videoType}`
]);
生成是node.js Spawn
的一部分我的 powershell脚本如下:
param(
[string]$originFile = $Args[0],
[string]$outputFile = $Args[1]
)
echo "Moving moov atom"
ffmpeg -i $originFile -vcodec copy -acodec copy -movflags +faststart $outputFile
但是,脚本不会使用
参数执行 ./cache/videos/${tempFileName + "."}${videoType}
但是,如果我将原义字符串的参数更改为
./cache/videos/inputVideo.mov
它执行得很好。
这真的让我挠头。
我创建了两个使用相同主体的测试脚本...那么,${tempFileName + "."}${videoType}
的翻译方式仅仅是这样吗?话虽这么说,但如果我回应这些论据,它们就是所期望的。
脚本1
./convert_videos.ps1 ./inputVideo.mov outputVideo.mov
脚本2
param(
[string]$originFile = $Args[0],
[string]$outputFile = $Args[1]
)
echo "Moving moov atom"
ffmpeg -i $originFile -vcodec copy -acodec copy -movflags +faststart $outputFile
答案 0 :(得分:0)
我认为您在Powershell脚本中如何声明参数遇到了问题。请尝试以下操作:
MyView.xaml
在调用脚本时,您也可以使用更Powershell-y的方式命名参数,尽管这不会影响脚本的执行,但对那些沉浸在Powershell中的人来说,它看起来更好:)
param(
[Parameter(position = 0)]
[string]$originFile,
[Parameter(position = 1)]
[string]$outputFile
)
# For debugging, check the values in PS
echo "Moving moov atom. originFile: $originFile. outputFile: $outputFile. Working Directory: $((Get-Location).Path)"
ffmpeg -i $originFile -vcodec copy -acodec copy -movflags +faststart $outputFile
答案 1 :(得分:0)
您的代码唯一明显的问题是,模板文字中有一个前导空格,它是作为最后一个参数传递的。
此前导空格保留为参数的一部分,可能会使路径无效。
因此,替换:
` ./cache/converted_videos/${tempFileName + "."}${videoType}`
具有:
`./cache/converted_videos/${tempFileName + "."}${videoType}`
两个方面:
考虑使用更简单的${tempFileName + "."}${videoType}
${tempFileName}.${videoType}
在PowerShell脚本中,没有必要将= $Args[0]
和= $Args[1]
分配为参数的默认值。如果在调用脚本时确实指定了参数,则默认情况下它们会在位置上绑定;否则,相应的$Args
元素将为空。