批量整理MMS数据

半腔热情 提交于 2019-12-24 03:17:00

1. 程序说明

  对大量MMS数据文件,根据文件名,将其移动到相应的文件夹内。

2. 程序算法

  MMS数据文件名格式如下
在这里插入图片描述
不同的字段之间使用下划线"_"分隔。遍历指定目录下的所有cdf文件,对每一个文件的文件名通过下划线分离出所有字段,并检测每一个字段所对应的目录是否存在,若不存在,则建立相应的文件夹,并将文件移入相应的文件夹中。对于日期,需要分别建立与年和月相对应的目录。
  程序使用PowerShell实现。

3. 程序代码

# organize mms data
# writen by Liangjin Song on 20191220

# the directory where the mms data is saved
$mmsdir="D:\test"

######################################## begin ##########################################
# get the current position
$currentdir=Split-Path -Parent $MyInvocation.MyCommand.Definition
cd $mmsdir
# list all of the cdf files
Get-ChildItem .\ | ForEach-Object -Process{
    if($_ -is [System.IO.FileInfo] -and ($_.name.EndsWith("cdf")) -and ($_.name.IndexOf("_") -ne -1))
    {
        $cdf=$_.name
        $info="   Moving  "
        $info = -join ($info, $cdf)
        $info

        # split the file name accoreding to "_"
        $pt2=$cdf.IndexOf("_")
        $pt1=0
        while($pt2 -gt 0)
        {
            $term=$cdf.Substring($pt1,$pt2-$pt1)
            $pt1=$pt2+1

            # deal with the date
            if(($term.Length -eq 8) -and ($term -match "20"))
            {
                $year=$term.Substring(0,4)
                $month=$term.Substring(4,2)
                $day=$term.Substring(6,2)

                if(-not(Test-Path($year)))
                {
                    $null = md $year
                }
                move $cdf $year
                cd $year

                if(-not(Test-Path($month)))
                {
                    $null = md $month
                }
                move $cdf $month
                cd $month
            }
            else
            {
                if(-not(Test-Path($term)))
                {
                    $null = md $term
                }
                move $cdf $term
                cd $term
            }

            $pt2=$cdf.IndexOf("_",$pt1+1)
        }

        cd $mmsdir
    }
}
cd $currentdir
########################################## end #######################################

4. 使用说明

(1) 将上述代码保存到本地,其后缀名为.ps1
(2). PowerShell的准备
   对于Windows用户,从Windows 7开始,系统已经内置Windows PowerShell,无需另外安装。2015年,Microsoft公布PowerShell源代码, Linux用户可直接安装PowerShelll。
(3). 更改PowerShell策略
  PowerShell默认执行策略为Restricted,这种策略下无法执行本地脚本。Restricted策略下执行本地脚本会出现如下错误
在这里插入图片描述
以管理员身份运行Powershell, 执行Set-ExecutionPolicy RemoteSigned命令,将执行策略更改为RemoteSigned,以允许执行本地脚本。
在这里插入图片描述
(4) 执行脚本
  将脚本中$mmsdir路径更改为本地MMS数据所在路径。在PowerShell内将工作目录切换到脚本所在目录,输入脚本名即可执行。或者选中脚本,右键,选择使用PowerShell运行。
(5) 运行效果
在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!