在PowerShell中重命名命令的输出

问题描述 投票:0回答:1

我使用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 }
powershell foreach powershell-v3.0
1个回答
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-object,但它们由foreach块分隔,在那里创建一个变量$ c,该脚本的其余部分无法看到它,因为它的范围仅限于foreach。然后你有一个在管道外面的重命名项目然后尝试使用管道变量$ _,它将为null,因为它在管道外部。最后你添加2到$ c,这是null,因为它超出了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的输出。

© www.soinside.com 2019 - 2024. All rights reserved.