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

问题描述 投票:0回答:2

我使用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等效的吗?

谢谢, 托马斯

bash powershell translate code-translation
2个回答
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

1
投票

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

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

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

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

PowerShell-idiomatic translation of your code:

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)"
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.