Powershell询问日期的文件名

时间:2016-07-06 14:24:24

标签: powershell scripting

我刚刚开始进入powershell作为文件收集过程的解决方案。基本上它的要点是我想循环遍历具有开始通配符的文件目录,询问julian日期,然后根据该日期重命名该文件(格里高利)。

现在我只有代码(如下所示)根据今天的日期重命名文件,但这只是因为我无法编写足够高级的东西来做我想做的事情。捷径在100%的时间里都不会起作用。任何人都可以提供有关如何查询朱利安日期和重命名的任何帮助?

以下是重命名文件之前文件的外观示例,以及重命名文件后我希望它如何显示。

重命名之前 - COMPANY.DATA.J2016183.Y98173987(除了更改日期外,前3个部分是不变的。只有点后面的最后一个分隔部分才是我不需要的随机密钥。&# 34; J"是一个常数,因为它只是指朱利安。我需要询问的是" J")之后的日期。

重命名后所需的文件名 - DATA.2016-07-04.txt

$Today = (Get-Date).Date
$Day = $Today.AddDays(-2)
$newday = $Day.ToString("yyyy-MM-dd")
Get-ChildItem "\\fileserv\folder\COMPANY.DATA.*" -Recurse| 
Rename-Item -NewName {'DATA.' + $newday + '.txt' }

(-2只与文件名/数据差异有关。文件名比实际数据提前2天)。

任何帮助将不胜感激。谢谢,

2 个答案:

答案 0 :(得分:2)

这是一个将Julian转换为Gregorian的函数(来源:http://powershell.com/cs/media/p/18723.aspx):

<# 
ALZDBA 20120831 

#> 
function Convert-JulianDateFormat2Date ( [int]$YYYYddd ) { 
####################### 
<# 
.AUTHOR 
    ALZDBA 20120831 
.SYNOPSIS 
    Convert YYYYddd to [date]. 
.DESCRIPTION 
    convert a numeric Julian date format to a regular date ( date datatype ) 
.INPUTS 
    $YYYYddd e.g. 2012245 
.OUTPUTS 
    [date] 
.EXAMPLE 
Clear-Host  
    $mydate = Convert-JulianDateFormat2Date -YYYYddd 2012263  
    $mydate  
    $mydate.dayofyear  

#> 
    $year = [int]( $YYYYddd / 1000 )*1000 
    $DayOfYear = $YYYYddd - $year 
    $date = Get-Date -Year ( $year/1000 ) -Month 1 -Day 1 -Hour 0 -Minute 0 -Second 0 
    #$date.DayOfYear  
    $date = $date.AddDays( $DayOfYear - 1 ) 
    $date 
    } 

使用此功能,您可以按如下方式重命名文件:

$delim = "."
Get-ChildItem "\\fileserv\folder\COMPANY.DATA.*" -Recurse | 
foreach { 
    $nameArray = $_.Name.Split($delim)

    # CONVERT DATE:
    $jDate = $nameArray[2].Replace("J","")
    $mydate = Convert-JulianDateFormat2Date -YYYYddd $jDate
    $newDate = $mydate.ToString("yyyy-MM-dd")

    #RENAME FILES:
    $newName = $nameArray[1]+$delim+$newDate+$delim+$nameArray[4]
    Rename-Item $_ -NewName $newName 
}

答案 1 :(得分:0)

Ryan Drane在这里有一篇关于这个问题的好文章:http://www.ryandrane.com/2015/04/convert-julian-date-to-gregorian-date-in-powershell/

他为您的应用程序修改过的方法看起来像这样:

$filename = "COMPANY.DATA.J2016183.Y98173987"
$JulianYear = $filename.Substring(14,4)
$JulianDay = $filename.Substring(18,3)
$GregorianDate = (Get-Date -Year $JulianYear -Month 01 -Day 01).AddDays($JulianDay - 1)

虽然该代码确实返回附加时间的格里高利日期,但删除它并不是很多工作,并添加文件处理方法。