我想完成一个脚本,将允许循环通过文件夹和文件。Powershell提取年份和月份从字符串
- 该脚本将导入一个文件并从文件中提取名称和编号。
- 使用通过
C:\Temp
文件夹的名称循环来查找该名称。 - 列出该文件夹下的所有文件并提取年份和月份。该文件看起来像下面和脚本从文件名中提取
201705
和转换05
个月到May
AAA_123456789_201705021541_AAAAAA.pdf
- 然后脚本需要是
May
,June
,July
等任何文件,并通过创建一个将它们发送到不同的文件夹使用导入文件中的数字的文件夹。例如,如果文件名有05
,那么文件夹X00000000MAY2017
和文件可能被移动到该文件夹。
到目前为止已经得到了下面的脚本。我能够导入文件提取信息,并通过它循环,但卡住部分从文件名中提取月份和年份,并将它们放入变量中。
$data = Import-Csv -Path C:\temp\test.txt -Header "Number","Name" -Delimiter "|"
$Name = $data.Name
foreach ($cxName in $Name) {
$cxName = Get-ChildItem C:\temp\$cxName
ForEach ($item in $cxName) {
If ($item -match "(?<year>\d\d\d\d)(?<mon>\d\d)") {
"$item's date is $($Matches.Year)"
} Else {
"$item failed to match"
}
}
}
你怎么知道其中的日期将是在该文件名字符串?我对步骤4的工作方式也有点失落。那么匹配的日期将有一个相应的文件夹,以MonYYYY结尾,您必须查找? – Matt
我假设你的正则表达式的作品,但'$ Matches.Year'会在你的文件名例子中输出“1234”?有什么方法可以确保你的约会总是在同一个地方吗?或者你有某种参考? – 30000MONKEYS
'[datetime] :: parseexact($ item.name.split('_')[2] .substring(0,6),'yyyyMM',$ null)''应该给你一个'[datetime]'对象。然后使用'ToString('MMMyyyy')'来重新格式化它。 – TheMadTechnician