【问题标题】:Renaming output of a command in PowerShell在 PowerShell 中重命名命令的输出
【发布时间】:2019-03-15 11:07:17
【问题描述】:

我正在使用 Mp4box 将文件拆分为一分钟的部分,通常 Mp4box 使用 file_nnn.mp4 其中 n 类似于 001、002、003...。 我想将它重命名为 partn.mp4 ,其中 n 也是一个递增的奇数。 我使用此代码,但它不起作用。

Mp4box -split 60 file.mp4 | foreach- 
object -begin {$c=1} -process rename- 
item $_ -newname "part$c.mp4"; 
$c=$c+2 }

【问题讨论】:

  • 缺少括号? -process { rename-item $_ -newname "part$c.mp4"; $c=$c+2}
  • 那么Mp4box -split 60 file.mp4的输出是什么
  • xxx增加的是file_xxx.mp4,我贴出来了。
  • 我的意思是输出字符串或者它们是硬盘上的文件。我的意思是 mp4box 是一个 powershell 命令吗?如果 Mp4box -split 60 file.mp4 不输出 powershell 理解的字符串或对象,那么你就不能像你拥有的那样真正使用 powershell。就像powershell中Mp4box的确切输出是什么。请在帖子中发布输出,以便我们帮助解决此脚本。

标签: powershell foreach powershell-3.0


【解决方案1】:

所以让我们谈谈你有什么问题。

Mp4box -split 60 file.mp4 |
    foreach-object -begin {$c=1} -process 
rename-item $_ -newname "part$c.mp4"; 
$c=$c+2
}

这不是有效的 powershell 语句。 开头很好,但是在第一个管道 | 之后,您然后使用带有参数 -process 和 -begin 的不完整的 foreach-object 但它们被创建变量 $ 的 foreach 块分隔c 脚本的其余部分看不到,因为它的范围仅限于 foreach。然后,您有一个在管道 | 之外的重命名项,然后尝试使用管道变量 $_ ,因为它在管道 之外,所以它将为空|。最后,您将 2 添加到 $c 中,因为它超出了 foreach 中 $c 的范围,所以它为空。当没有左括号时,您还可以添加右括号 }

这是一个完全依赖于 Mp4box 输出的工作脚本。如果 Mp4box 不是 powershell 命令而是可执行文件,那么这将不起作用。

$C = 1
Mp4box -split 60 file.mp4 |
    %{
        rename-item $_ -newname "part$c.mp4"
        $C += 2
     }

让我们回顾一下上面的内容。我在 foreach 之外调用 $C = 1 ,因此它可以在 foreach 范围内使用。

我管 | Mp4box 的输出到 %foreach-object 的简写。

% (foreach-object)方括号 { } 中,它从管道 | 重命名项目 $_强>。

然后它使用 += 的简写将 2 添加到 c,这与添加到 ($C = $C + 2)

相同

现在这又完全依赖于 Mp4box 的输出。

【讨论】:

  • 我不能投票给你,但非常感谢你的完美探索。
  • 好吧,当你可以投票时,请回来投票。写这些需要时间
  • 当然,mp4box是像ffmpeg一样可以分割文件的媒体多路复用器,它也有先进的概念。
  • 很遗憾,由于 mp4box 不是 PowerShell 命令,因此该脚本不起作用。
  • 是的,就像我说的取决于它是否是一个 powershell 命令:/
猜你喜欢
  • 1970-01-01
  • 2018-10-31
  • 2019-05-07
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 2011-06-04
  • 1970-01-01
相关资源
最近更新 更多