Re: [請問] 以資料夾為名稱針對資料夾內圖片的批量壓縮方法
先安裝 NanaZip 或 7-Zip
在 PowerShell 中輸入 7z.exe 確認是否可用
若得到以下訊息則必須手動新增 7z.exe 所在目錄到環境變數 PATH
"無法辨識 '7z.exe' 詞彙是否為 Cmdlet、函數、指令檔或可執行程式的名稱。......"
在 PowerShell 中執行下列命令
使用前記得先修改 Path\To\Dir 為你要的主目錄路徑
Set-Location -LiteralPath 'Path\To\Dir'
$outputDirPath = $PWD.Path
foreach ($item in (Get-ChildItem -LiteralPath .)) {
$desFilePath = Join-Path $outputDirPath "$($item.Name).zip"
if ($item.PsIsContainer) {
$souFilePath = Join-Path $item.FullName *
} else {
$souFilePath = $item.FullName
}
& 7z.exe a "$($desFilePath)" "$($souFilePath)"
}
你也可只用 PowerShell 的 cmdlet 來達到相同功能
Set-Location -LiteralPath 'Path\To\Dir'
$outputDirPath = $PWD.Path
foreach ($item in (Get-ChildItem -LiteralPath .)) {
$desFilePath = Join-Path $outputDirPath "$($item.Name).zip"
$escDesFilePath = $desFilePath -replace '[\`\[\]]', '`$0'
if ($item.PsIsContainer) {
$escSouFileParentPath = $item.FullName -replace '[\`\[\]]', '`$0'
$escSouFilePath = Join-Path $escSouFileParentPath *
} else {
$escSouFilePath = $item.FullName -replace '[\`\[\]]', '`$0'
}
Compress-Archive -Path $escSouFilePath -DestinationPath $escDesFilePath
}
以下是補充說明
- 路徑中單獨的 . 等同 $PWD.Path
- Get-ChildItem 'path\to\dir' 等同 Get-Item 'path\to\dir\*'
- 用參數 -LiteralPath 指定輸入,則不會將路徑中的任何字元視為特殊字元
- 若只是要在路徑中使用 * 字元,則可用 -replace 跳脫路徑中的方括號字元
- 工作目錄中帶有特殊字元可能會導致某些 cmdlet 找不到相對路徑的目標,所以餵給 cmdle
t 的路徑最好是絕對路徑。
例如把 .\file.ext 轉成絕對路徑的方法如下
$ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath('.\file.ext')
大概就這樣…
--
Sent from PTTopia
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.247.165.180 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/EZsoft/M.1717398069.A.841.html
※ 編輯: falcon (27.247.165.180 臺灣), 06/03/2024 15:17:47
※ 編輯: falcon (27.247.165.180 臺灣), 06/03/2024 15:26:03
推
06/05 20:22,
3月前
, 1F
06/05 20:22, 1F
推
06/22 21:25,
2月前
, 2F
06/22 21:25, 2F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
EZsoft 近期熱門文章
PTT數位生活區 即時熱門文章