Итак, давайте поговорим о том, что у вас не так.
Mp4box -split 60 file.mp4 |
foreach-object -begin {$c=1} -process
rename-item $_ -newname "part$c.mp4";
$c=$c+2
}
Это недопустимое утверждение powershell.Начало хорошее, но после первого канала | вы затем используете неполный объект foreach с параметрами -process и -begin, но они разделяются блоком foreach, где вы создаете переменную $ c, что не может быть замечено остальной частью сценария, потому что его область действия ограничена foreach.Затем у вас есть элемент переименования, который находится вне канала | , а затем попробуйте использовать переменную $ _ , которая будет иметь значение NULL, поскольку она находится вне канала | .Наконец, вы добавляете 2 к $ c , что является нулевым, потому что оно выходит за рамки $ c в foreach.Вы также добавляете закрывающую скобку } , когда открывающей скобки нет.
Вот рабочий скрипт, который полностью зависит от вывода Mp4box.Если Mp4box не является командой powershell и является исполняемым файлом, то это не будет работать.
$C = 1
Mp4box -split 60 file.mp4 |
%{
rename-item $_ -newname "part$c.mp4"
$C += 2
}
Давайте рассмотрим то, что описано выше.Я называю $ C = 1 вне foreach, чтобы его можно было использовать в рамках foreach.
I pipe |вывод Mp4box в % , что является сокращением для foreach-object .
В скобках % (foreach-object) {} переименовывает элемент $ _ из трубы | .
Затем он добавляет 2 к c, используя сокращение для + = , что аналогично добавлению к ($ C = $ C + 2)
Теперь опять же, это зависит только от вывода Mp4box.