如何通过PowerShell循环批量处理一级子目录的媒体文件
整理家庭视频和图片:实现脚本遍历一级子目录自动分类
问题背景
我需要为家人整理家庭视频和图片,现有脚本可正常运行,但需手动在每个目录执行。希望修改脚本,让它仅针对一级子目录运行,从E盘根目录循环处理,最终让每个一级子目录都像示例里的Charlie目录一样,自动分出pictures和videos子目录存放对应文件。
当前使用的简易脚本
分别处理图片和视频的两个独立脚本:
图片分类脚本
$current_dir = Split-Path -Path $pwd -Leaf $new_path = "H:\sorted\$current_dir\pictures" Get-ChildItem -R . -Include ('*.jpg', '*.jpeg', '*.png') | Move-Item -Destination (New-Item -Force -Path "$new_path" -Type Directory)
视频分类脚本
$current_dir = Split-Path -Path $pwd -Leaf $new_path = "H:\sorted\$current_dir\videos" Get-ChildItem -R . -Include ('*.mp4', '*.mkv', '*.3pg','*.flv', '*.mov', '*.gif') | Move-Item -Destination (New-Item -Force -Path "$new_path" -Type Directory)
示例文件结构
E:. ├───April9383 ├───April98765 │ └───carson ├───Cathy ├───Cathy(1) ├───Charlie │ ├───Photos │ └───Videos ├───daleville
尝试过的代码(未成功)
我曾尝试用循环调用脚本,但获取的是父文件夹名称,而非目标一级子目录:
$sub_dir = $(Get-ChildItem . -Depth 1) foreach ($sub in $sub_dir) { picture-sort.ps1 }
已解决:最终脚本
参考@Santiago的回复并稍作修改后,得到可以自动遍历一级子目录并分类的完整脚本:
$base = "E:\sorted" $current_dir = $pwd # 获取一级子目录并遍历 Get-ChildItem . -Depth 0 -Directory | ForEach-Object { # 拼接目标路径 $path = Join-Path $base -ChildPath $_.Name $pic_path = "$path\pictures" $vid_path = "$path\videos" # 拼接源目录路径 $stripped_dest_path = Split-Path -Path $path -Leaf $src_path = Join-Path $current_dir $stripped_dest_path # 输出处理日志 Write-Output "正在从 $src_path 复制图片到 $pic_path" # 移动所有图片文件 Get-ChildItem -R $src_path -Include ('*.jpg', '*.jpeg', '*.png') | Copy-Item -ErrorAction SilentlyContinue -Destination (New-Item -Force -Path "$pic_path" -Type Directory) # 输出处理日志 Write-Output "正在从 $src_path 复制视频到 $vid_path" # 移动所有视频文件 Get-ChildItem -R $src_path -Include ('*.mp4', '*.mkv', '*.3pg','*.flv', '*.mov', '*.gif', '*.avi') | Copy-Item -ErrorAction SilentlyContinue -Destination (New-Item -Force -Path "$vid_path" -Type Directory) Write-Output "当前目录处理完成" }
内容的提问来源于stack exchange,提问作者lockHart
相关产品推荐
相关产品推荐

