Преобразовать простой сценарий Bash в PowerShell?
Отсюда я вытащил скрипт 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 ответ
Если вы не сможете найти аналог, уже приготовленный в PowerShell, ваш единственный шанс - понять логику этого скрипта и написать его в PowerShell с нуля, поскольку есть большие различия.
Посмотрите на разницу в синтаксисе / командах и сделайте соответствующий перевод. Некоторые посты / документы, связанные с Bash vs Powershell, доступны в сети, например, это. И, конечно же, обратитесь к руководствам по началу работы с PowerShell. Например, синтаксис для for отличается, для 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
}