Преобразовать простой сценарий Bash в PowerShell? - PullRequest
0 голосов
/ 28 декабря 2011

Я вытащил Bash-скрипт из здесь , который проверяет AVI-файл на наличие плохих кадров, используя расширение ffmpeg и cygwin. Я могу выполнить код в Mingw. Я поместил ffmpeg.exe (ren ffmpeg), cygwin1.dll и cygz.dll в папку bin Mingw (/ c / mingw / bin /). Теперь я хочу перенести этот код bash на PowerShell. Может кто-нибудь пролить свет PowerShell на этот?

Сценарий: (путь: / c / mygw / bin / AviConvert)

#!/bin/bash

FFMPEG="ffmpeg"
LIST=`find | grep \.avi$`

for i in $LIST; do
    OUTP="$i.txt"
    OUTP_OK="$i.txt.ok"
    TMP_OUTP="$i.tmp"
    if [ -f "$OUTP" -o -f "$OUTP_OK" ] ; then
    echo Skipping "$i"
    else
    echo Checking "$i"...
    RESULT="bad"
    ffmpeg -v 5 -i "$i" -f null - 2> "$TMP_OUTP" && \
        mv "$TMP_OUTP" "$OUTP" && \
        RESULT=`grep -v "\(frame\)\|\(Press\)" "$OUTP" | grep "\["`
    if [ -z "$RESULT" ] ; then
        mv "$OUTP" "$OUTP_OK"
    fi
    fi
done

1 Ответ

3 голосов
/ 28 декабря 2011

Если вы не сможете найти аналог, уже приготовленный в PowerShell, ваш единственный шанс - понять логику этого скрипта и написать его в PowerShell с нуля, поскольку есть большие различия .

Посмотрите на разницу в синтаксисе / командах и сделайте соответствующий перевод. Некоторые Bash vs Powershell связанные посты / документы, доступные в сети, например, это . И, конечно же, обратитесь к руководствам по началу работы с PowerShell. Например, синтаксис для для отличается, для PowerShell это:

for (_init_, _cond_, _incr_) { 
   _operators_
}

Кстати, в вашем случае лучше использовать foreach , т. Е. Иметь что-то вроде:

(get-childitem $path -Recurse | select-string -pattern .avi | % {$_.Path} > matchingfiles.txt)
$FILESARRAY = get-content matchingfiles.txt
foreach ($FILE in $FILESARRAY)
{
(get-content $FILE ) |foreach-object {$_ -replace $find, $replace} | set-content $FILE
}
...