根据扩展名将文件移动到适当的位置 [英] Moving files to appropriate location based on their extension

查看:53
本文介绍了根据扩展名将文件移动到适当的位置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个清理脚本,可以根据文件的扩展名将文件移动到适当的预设位置.

例如,扩展名为 .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"

我完全意识到这是以一种不雅的方式来实现我的目标.所以我想知道如何修改脚本以便我可以

  1. 重用重复代码
  2. 如果目标文件夹不存在,则应该创建它.
  3. 将类似的扩展名归为一组,例如 png 和 jpg

解决方案

已测试.不管理分组的(非递归)解决方案:

<前>ls $dirtyfolder/* |?{!$_.PSIsContainer} |%{$dest = "$($org)ORG\$($_.extension)"if (! (Test-Path -path $dest ) ) {new-item $dest -type 目录}mv -path $_.fullname -destination $dest}

<小时>

分组解决方案:

<前>ls $dirtyfolder/* |?{!$_.PSIsContainer} |%{$dest = "$($org)ORG\$(get-destbytype $_.extension)"if (! (Test-Path -path $dest ) ) {new-item $dest -type 目录}mv -path $_.fullname -destination $dest}

其中 get-destbytype 是以下函数:

<前>函数 get-destbytype($ext) {开关 ($ext){{$ext -match '(jpg|png|gif)'} { "图像" }{$ext -match '(sql|ps1)'} {脚本"}默认 {"$ext" }}}

I have a cleanup script that moves files based on their extension to appropriate preset locations.

For example, a file with the extension .xls will be moved to ~\XLS folder, .sql to ~\SQL and so on. Here is the my script.

$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"

I am fully aware that this in an inelegant way to achieve my objective. So I would like to know how I can modify the script so that I can

  1. reuse repetitive code
  2. if the destination folder does not exist, it should be created.
  3. group similar extensions, like png and jpg

解决方案

Tested. A (not-recursive) solution that does not manage grouping:

ls $dirtyfolder/* | ? {!$_.PSIsContainer} | %{
  $dest = "$($org)ORG\$($_.extension)"
  if (! (Test-Path -path $dest ) ) {
    new-item $dest -type directory
  }
  mv -path $_.fullname -destination $dest 
}


Solution with grouping:

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 is the following function:

function get-destbytype($ext) {
 Switch ($ext)
 {
  {$ext -match '(jpg|png|gif)'} { "images" }
  {$ext -match '(sql|ps1)'} { "scripts" }
  default {"$ext" }
 }
}

这篇关于根据扩展名将文件移动到适当的位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆