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 等效项吗?
谢谢,
托马斯
与编程语言之间的任何翻译一样,有 (a) 一种尽可能字面意义的方法,与 (b) 形成对比,一种不立即明显但在目标精神中的方法-语言方法。
(b) 从长远来看总是更可取的。
使用 PowerShell,因为它是“命令提示符”( cmd.exe) 及其批处理文件的远超后继者。
下面的代码是在PowerShell(v3+ 语法)中尝试 (b )。
我鼓励您研究代码并在您自己的答案中发布对它的解释,以便其他人也可以受益。
为了帮助进行分析,请考虑以下资源:
本系列文章是对 PowerShell 的出色的、面向配方的介绍。
http://hyperpolyglot.org/shell以简洁的表格形式将 POSIX 类 shell 的语法bash与cmd.exe和 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)