为 Windows 翻译 OS X Bash 脚本

Tho*_*ght 1 bash powershell translate code-translation

我使用Hedge传输在我的佳能 5D Mark III 上拍摄的Magic Lantern视频文件。

在 OS X 上,我可以使用 Automator 设置 bash 脚本,执行mlv_dump将文件从 MLV 传输到 cDNG 序列。

我目前使用的脚本是:

cd "$(dirname "$1")"
for f in "$@"; do
    if [[ -f $f ]]; then
        filename=${f##*/};
        folder=${filename%.*}
        mkdir "${folder}";

        ~/mlv_dump --dng $f -o ${folder}/${folder}_;
    fi
done
Run Code Online (Sandbox Code Playgroud)

这可以轻松转换为 Windows 等效项吗?

谢谢,
托马斯

mkl*_*nt0 5

与编程语言之间的任何翻译一样,有 (a) 一种尽可能字面意义的方法,与 (b) 形成对比,一种不立即明显但在目标精神中的方法-语言方法。
(b) 从长远来看总是更可取的。

使用 PowerShell,因为它是“命令提示符”( cmd.exe) 及其批处理文件的远超后继者。
下面的代码是在PowerShell(v3+ 语法)中尝试 (b )。

我鼓励您研究代码并在您自己的答案中发布对它的解释,以便其他人也可以受益。

为了帮助进行分析,请考虑以下资源

代码的 PowerShell 惯用翻译:

param(
  [Parameter(Mandatory, ValueFromRemainingArguments)]
  [System.IO.FileInfo[]] $LiteralPath
)

$outputBaseFolder = Split-Path -Parent $LiteralPath[0].FullName
foreach ($f in $LiteralPath) {
  if ($f.exists) {
    $outputFolder = Join-Path $outputBaseFolder $f.BaseName
    New-Item -ItemType Directory $outputFolder
    & "$HOME/mlv_dump" --dng $f.FullName -o "$outputFolder/$($f.BaseName)_"
  } else {
    Write-Warning "Item doesn't exist or is not a file: $($f.FullName)"
  }
}
Run Code Online (Sandbox Code Playgroud)