簡體   English   中英

將 arguments 作為 PowerShell 中的字符串傳遞給調用運算符 (&)

[英]Passing arguments to Call operator (&) as a string in PowerShell

我有一個 PowerShell 腳本,我在其中使用 Call 運算符通過一組參數/選項運行 mkvmerge.exe。 我想收集一個字符串中的選項,以便可以根據腳本中前面的輸入擴展該字符串,但是當目標文件位於該字符串中時,mkvmerge 出於某種原因無法識別它。 我不確定這是因為變量擴展還是什么問題

下面的代碼說明了這個問題。 我也嘗試過將選項添加到數組並使用 @ 運算符,但沒有成功

$mkvmerge = "C:\Program Files\MKVToolNix\mkvmerge.exe"
$applyoptions = $true
$subtitleformat = "srt"
$isolanguage = "eng"

foreach ($file in Get-ChildItem -File -Include *.mkv) {

    <# Make the string with options for mkvmerge #>
    $mkvmergeparams = ""
    if ($applyoptions -eq $true) {
$mkvmergeinstructions += ('`' + "@options.json")
}
    $mkvmergeparams += ("-o " + "`"" + $file.DirectoryName + "\Remux-" + $file.BaseName + ".mkv`" " + "`"" + $file + "`"")
    if (-not($subtitleformat -eq "")) {
$mkvmergeinstructions += (" --default-track " + $subtitledefault) + " --language " + "0:" + $isolanguage + " " + "`"" + $file.DirectoryName + "\" + $file.BaseName + "." + $subtitleformat + "`""
}

    <# Check the string #>
    Write-Host $mkvmergeparams

    <# This does not work, but I would like it to #>
    & $mkvmerge $mkvmergeparams

    <# This works, but would require a separate line for each set of possible options #>
    #& $mkvmerge `@options.json -o ($file.DirectoryName + "\" + "Remux-" + $file.BaseName + ".mkv") $file --default-track $subtitledefault --language ("0:" + $isolanguage) ($file.DirectoryName + "\" + $file.BaseName + "." + $subtitleformat)

}
Read-Host -Prompt "Press enter to exit"

在第二個示例中,變量被擴展並且 mkvmerge 識別給定的選項,但這需要為每組可能的輸入有一個單獨的 mkvmerge 行

檢查字符串時,它似乎會擴展以完全符合應有的外觀

找到了答案。 我必須用 arguments 創建一個數組

<# Build array with options for mkvmerge #>
        $mkvmergeparams = $null
        if ($applyoptions -eq $true) {$mkvmergeparams += @('@options.json')}
        $mkvmergeparams += @("-o", ($file.DirectoryName + "\Remux-" + $file.BaseName + ".mkv"), $file)
        if (-not($subtitleformat -eq "")) {$mkvmergeparams += @("--default-track", $subtitledefault, "--language", ("0:" + $isolanguage), ($file.DirectoryName + "\" + $file.BaseName + "." + $subtitleformat))}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM