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) 运行效果
来源:CSDN
作者:不入流的IT宅男
链接:https://blog.csdn.net/Function_RY/article/details/103641093