我想完成一個腳本,將允許循環通過文件夾和文件。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