powershell - Windows 7 PowerShell 复制项(如果更大)
问题描述
我正在尝试将旧的 OSX Aperture 照片库存档到 Windows 文件夹。我想使用 Copy-Item 来处理复杂的嵌套文件夹结构并将它们全部转储到一个平面文件夹中。我认为以下命令可以完成我想要的大部分操作:
PS C:\> Copy-Item -Path E:\ApertureLib\*.jpg -Destination E:\Export -Recurse
有时原始 JPG 在文件夹结构中。这显然更适合归档。在名为 preview 的子文件夹中总是有一个较小的预览。如果没有原件,我想复制它。预览和原始文件具有相同的文件名。
所以,我需要我的命令来处理这样的文件名冲突:如果新文件较大,则覆盖旧文件。如果不是,什么也不做。有任何想法吗?
解决方案
也许是这样的(未经测试):
$destination = "E:\Export"
Get-ChildItem "E:\ApertureLib" -Include *.jpg -Recurse | ForEach-Object {
$destinationName = Join-Path $destination $_.Name
if ( Test-Path -LiteralPath $destinationName ) {
$copyTheFile = $_.Length -gt (Get-Item -LiteralPath $destinationName).Length
}
else {
$copyTheFile = $true
}
if ( $copyTheFile ) {
Copy-Item $_ $destinationName -WhatIf
}
}
如果这按预期工作,您可以删除-WhatIf
以执行复制。
推荐阅读
- powershell - 如何使用 Powershell 添加用户并添加到 Active Directory?
- excel - VBA中的偏移高度参数
- html - 居中位于其容器底部的 div
- java - WebClient 在 Stream 中的每个元素调用上打开和关闭连接
- html - 如何使用 jQuery 隐藏一个空的非唯一表列
- laravel - Laravel Carbon::now() 方法在 ubuntu 服务器上返回 null
- csv - 发布的 https://docs.google.com/spreadsheets 重定向到其他 URL(CSV 数据)
- flutter - 在 Flutter 中出现此错误:“IconData”类型不是“Color”类型的子类型
- php - 从字符串中读出预定义的值 (PHP)
- django - 如何在 Facebook 的 https://m.me/ 中使用 Social-Auth-Django-App