翻译适用于Windows的OS X Bash脚本

时间:2018-01-28 19:24:03

标签: 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

这可以轻松转换为Windows等价物吗?

谢谢,
托马斯

2 个答案:

答案 0 :(得分:1)

与编程语言之间的任何翻译一样,有(a) as-literal-as-possible 方法,与(b)形成对比,不是很明显的 - 但是 - 目标精神语言方法 (b)从长远来看总是优先的。

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

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

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

您的代码的PowerShell-idiomatic翻译:

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)"
  }
}

答案 1 :(得分:1)

简单,是一个针对个人技能的相对答案,正如其他人所评论的那样,没有开箱即用的东西/工具可以使用或购买来做到这一点。这是所有手动工作,使用指针和其他人试图了解你可以收集到什么来完成你的用例。

例如,在你的街区......

    filename=${f##*/};
    folder=${filename%.*}
    mkdir "${folder}";

...很容易翻译成......

    $filename='PathToFileName'
    $foldername='PathToFolder'
    mkdir 'FolderName'

现在,翻译真的很简单,显然不完整。这是您必须要弄清楚的,使用指向的资源和PowerShell内置帮助文件以及这些示例。

在这个论坛上有几个关于这个转换主题的帖子,以及其他人如何达成共识哦,如果有什么可以做的话。

例如,下面将重点介绍完成X或Y所需的遍历工作。

  

将简单的Bash脚本转换为PowerShell?

     

我希望将此bash代码移植到PowerShell。任何人都可以流下   一些PowerShell点亮了这个?

     

Convert simple Bash script to PowerShell?

     

将bash脚本转换为Windows脚本

     

我有以下Unix shell脚本。我想转换这个   到Windows .bat文件(我知道我可以使用Cygwin而不是适应   它到Windows环境。但Cygwin对我来说不是一个选择。)

     

Convert bash script into Windows script

     

将xargs Bash命令转换为PowerShell?

     

我有一个简单的Bash命令可以自动调整某些图像的大小   使用ImageMagick的低流量网站 - 我想将其转换为   一个PowerShell命令,所以我不必在我的上安装Cygwin   网络服务器。

     

Convert xargs Bash command to PowerShell?

如上所述,有些途径/甚至是在线的人可能会成为一种途径。

但是,你应该多读一些关于如何做特定事情的事情,比如..

  • 创建文件和文件夹
  • 访问/读取文件,导入文件,过滤文件
  • 循环
  • 运营商(比较和分配)
  • 导航文件系统/ PSDrive