我有成千上万个跨5年的文件,我想移到年/月文件夹中。文件名都以
结尾_yyyy_mm_dd_wxyz.dat
我正在寻找有关如何生成此类文件夹并将这些文件使用Windows命令外壳yyyy / mm移至适当文件夹的想法。
答案 0 :(得分:1)
您需要一个带有(捕获组)的正则表达式,以从文件名中提取年/月。
假设年/月文件夹应直接放置在文件的父位置。
un 已通过-Version 2
## Q:\Test\2018\07\23\SO_51485727.ps1
Push-Location 'x:\folder\to\start'
Get-ChildItem *_*_*_*_*.dat |
Where-Object {$_.BaseName -match '_(\d{4})_(\d{2})_\d{2}_[a-z]+$'} | ForEach-Object {
$TargetDir = "{0}\{1}" -f $Matches[1],$Matches[2]
if (!(Test-Path $TargetDir)){MD $TargetDir | Out-Null}
$_ | Move -Destination $TargetDir
}
在ramdriive上运行脚本后,对树/ f进行采样:
PS A:\> tree /F
A:.
├───2017
│ └───07
│ test_2017_07_24_xyz.dat
└───2018
└───07
test_2018_07_24_xyz.dat
答案 1 :(得分:0)
我创建了这个快速又肮脏的脚本。 事情已经放入了比严格需要更多的变量,可以将它们组合在一行中,但是我认为这可以增加清晰度,希望可以帮助您了解会发生什么。
请注意,我使用了该项目最后一次写入(创建或编辑)的日期。 如果只需要文件的创建日期,而不是文件的上次编辑时间,则可以将LastWriteTime更改为CreationTime
#Load all files from the folder you wish to move on
$items = Get-ChildItem -Path "C:\SomeFolder\RestofPathToYourFiles"
foreach($item in $items) {
#Creates variables for year, month and day
$FolderYear = "$($item.LastWriteTime.Year)"
$FolderMonth = "$($item.LastWriteTime.Month)"
$FolderDay = "$($item.LastWriteTime.Day)"
#create variable with the new directory path
$NewPath = $item.Directory.FullName + "\" + $FolderYear + "\" + $FolderMonth + "\" + $FolderDay
#create variable with the new full path of the file
$NewFullPath = $NewPath + "\" + $item.Name
#test if the folder already is created, if not, create it
if((Test-Path -Path $NewPath) -eq $false) {
New-Item -Force -path $NewPath -Type Directory
}
#move the item to the new folder
Move-Item -Path $item.FullName -Destination $NewFullPath -Force
}
答案 2 :(得分:0)
最简单的是,我将执行以下操作:
示例...
=IF(A1 = "A", IF(B1= "B", IF(C1= "C", "True")))