我有一个清理脚本,可以根据文件的扩展名将文件移动到适当的预设位置。
例如,扩展名为 .xls 的文件将被移动到 ~\XLS 文件夹,.sql 会被移动到 ~\SQL 文件夹,依此类推。这是我的脚本。
$dirtyfolder = "\\server\c$\Documents and Settings\user\Desktop\"
$org = "\\BACKUPS\users\"
dir $dirtyfolder -fil *.doc | mv -dest "$($org)ORG\doc"
dir $dirtyfolder -fil *.txt | mv -dest "$($org)ORG\txt"
dir $dirtyfolder -fil *.sql | mv -dest "$($org)ORG\sql"
dir $dirtyfolder -fil *.log | mv -dest "$($org)ORG\log"
dir $dirtyfolder -fil *.zip | mv -dest "$($org)ORG\zip"
dir $dirtyfolder -fil *.7z | mv -dest "$($org)ORG\zip"
dir $dirtyfolder -fil *.png | mv -dest "$($org)ORG\img"
dir $dirtyfolder -fil *.jpg | mv -dest "$($org)ORG\img"
dir $dirtyfolder -fil *.mp3 | mv -dest "$($org)ORG\mp3"
我完全意识到这是以一种不优雅的方式来实现我的目标。所以我想知道如何修改脚本以便我可以
- 重用重复代码
- 如果目标文件夹不存在,则应创建它。
- 将相似的扩展名分组,例如 png 和 jpg
已测试。不管理分组的(非递归)解决方案:
ls $dirtyfolder/* | ? {!$_.PSIsContainer} | %{
$dest = "$($org)ORG\$($_.extension)"
if (! (Test-Path -path $dest ) ) {
new-item $dest -type directory
}
mv -path $_.fullname -destination $dest
}
分组解决方案:
ls $dirtyfolder/* | ? {!$_.PSIsContainer} | %{
$dest = "$($org)ORG\$(get-destbytype $_.extension)"
if (! (Test-Path -path $dest ) ) {
new-item $dest -type directory
}
mv -path $_.fullname -destination $dest
}
where get-destbytype
是以下函数:
function get-destbytype($ext) {
Switch ($ext)
{
{$ext -match '(jpg|png|gif)'} { "images" }
{$ext -match '(sql|ps1)'} { "scripts" }
default {"$ext" }
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)