在PowerShell中重命名命令的输出

时间:2018-10-10 13:54:48

标签: powershell foreach powershell-v3.0

我正在使用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 }

1 个答案:

答案 0 :(得分:0)

所以,让我们谈谈你的错。

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

这不是有效的powershell语句。 开头很好,但是在第一个管道 | 之后,您可以使用参数-process和-begin的不完整的foreach对象,但是它们由foreach块分隔,您可以在其中创建变量 $ c ,该脚本的其余部分无法看到,因为其范围仅限于foreach。然后,您有一个位于管道 | 外部的重命名项,然后尝试使用管道变量 $ _ ,该变量将为空,因为它位于管道 | 。最后,您在 $ c 中添加2,因为在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 的简写。

(每个对象)方括号 {} 中,它将从管道 | 中重命名项目 $ _ 。 strong>。

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

相同

现在,这再次完全取决于Mp4box的输出。