Переименование вывода команды в PowerShell - PullRequest
0 голосов
/ 10 октября 2018

Я использую 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 голосов
/ 10 октября 2018

Итак, давайте поговорим о том, что у вас не так.

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.

...