powershell - 按类型组织文件

标签 powershell powershell-2.0

我有这个脚本,它会定期运行以收集桌面文件并按文件类型将它们组织到备份驱动器上的单个文件夹中。

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/

相关文章:

powershell - 通过Powershell 2.0发送电子邮件

powershell - 将冒号分隔的字符串转换为 PowerShell 字典

powershell - 从文档中提取数据

c# - 从 C# 向 PowerShell 传递多个变量

powershell - Powershell-数字格式显示错误的结果

replace - Powershell,你做了多少次替换?

error-handling - Powershell : is there a limit to the number of output file types I can have?

powershell - Jenkins中Powershell脚本中调用参数

powershell - 如何使用 cmd 或 powershell 检查谁有权访问文件夹

powershell - 使用PowerShell ADSI提供程序将组添加到组