我有这个脚本,它会定期运行以收集桌面文件并按文件类型将它们组织到备份驱动器上的单个文件夹中。
function get-destbytype($ext)
{
switch ($ext)
{
{ $ext -match '(jpg|png|gif|bmp)'} { "images" }
{ $ext -match '(divx|mpeg|avi)'} { "videos" }
{ $ext -match '(cs|js|java|py|class|vbs|jsp)'} { "code" }
{ $ext -match '(sql|ps1|pl|py)'} { "scripts" }
{ $ext -match '(zip|7z|rar)'} { "compressed" }
{ $ext -match '(ppt|pptx|doc|docx|pdf)'} { "documents" }
{ $ext -match '(csv|xls|xlsx)'} { "spreadsheets" }
{ $ext -match '(exe|dll|jar|ear|bat|cmd)'} { "executables" }
{ $ext -match '(txt|log)'} { "text" }
{ $ext -match '(msg|htm|html|lnk)'} { "miscellaneous" }
{ $ext -match '(properties|xml|ini)'} { "config" }
default {"$ext" }
}
}
$dirtyfolder = "C:\Documents and Settings\user\Desktop\"
$org = "$nas\Desktop\ORG"
ls $dirtyfolder/* | ? {!$_.PSIsContainer} | %{
$dest = "$($org)\$(get-destbytype $_.extension)"
if (! (Test-Path -path $dest ) )
{
write-host "creating $dest"
new-item $dest -type directory
}
mv -path $_ -destination $dest
}
脚本经过了彻底的测试,在我能想象的大多数情况下似乎运行良好。最近第一次遇到 .csv
文件时,它们被移到了一个新的文件夹中
代码电子表格
。
这显然是因为 .cs
文件应该转到 code
文件夹,而 .csv
文件应该转到 电子表格
文件夹,脚本不区分.cs
和.csv
。
如何修改脚本以不执行此操作?
还有什么方法可以排除扩展名为 .lnk
的桌面快捷方式?
最佳答案
尝试使用更具体的正则表达式。只需在表达式末尾添加 $ 符号即可。 $ 符号表示行尾或在您的情况下为字符串结尾。
看起来像这样:
{ $ext -match '(jpg|png|gif|bmp)$'} { "images" }
您可以通过打开 powershell 并输入以下内容来轻松测试:
"abc.csv" -match '(cs|xls)$'
这将导致 False。
关于powershell - 按类型组织文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6477612/