使用字符串文字可以工作,但不能作为参数传递

时间:2019-05-03 16:20:47

标签: node.js powershell ffmpeg

我将字符串文字传递给我的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

2 个答案:

答案 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元素将为空。