As currently shown in your question, the command would work just fine in PowerShell.
# OK - executable name isn't quoted.
ffmpeg -i jellyfish-3-mbps-hd-h264.mkv
However, if you quote the executable path, the problem surfaces.
# FAILS, due to SYNTAX ERROR, because the path is (double)-quoted.
PS> "C:Program Filesffmpeginffmpeg" -i jellyfish-3-mbps-hd-h264.mkv
Unexpected token '-i' in expression or statement.
For syntactic reasons, PowerShell requires &
, the call operator, to invoke executables whose paths are quoted and/or contain variable references or subexpressions.
# OK - use of &, the call operator, required because of the quoted path.
& "C:Program Filesffmpeginffmpeg" -i jellyfish-3-mbps-hd-h264.mkv
Or, via an environment variable:
# OK - use of &, the call operator, required because of the variable reference.
# (Double-quoting is optional in this case.)
& $env:ProgramFilesffmpeginffmpeg -i jellyfish-3-mbps-hd-h264.mkv
If you don't want to have to think about when &
is actually required, you can simply always use it.
The syntactic need for &
stems from PowerShell having two fundamental parsing modes and is explained in detail in this answer.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…