我有一个脚本,根据修改日期将C:\ Year \ Month \“StoreFiles”中的文件重新组织为“C:\ Store \ Date \”StoreFiles。
#Variables
$StoreName = "aStore"
$SourceDir = "C:\Source"
$TargetDir = "C:\$StoreName"
# Create Folder based on Store List
if(-Not (Test-Path -Path $TargetDir)) {
New-Item -ItemType Directory -Path $TargetDir
}
# Search & create folders based on date
Get-ChildItem "$SourceDir\*$StoreName*" -Recurse | ForEach-Object {
$x = $_.LastWriteTime.ToShortDateString()
$new_folder_name = Get-Date $x -Format MMM-yyyy
$des_path = "$TargetDir\$new_folder_name"
if (Test-Path $des_path) {
Copy-Item $_.FullName $des_path
} else {
New-Item -ItemType Directory -Path $des_path
Copy-Item $_.FullName $des_path
}
}
但是修改日期并不理想。我可以使用“C:\ Year \ Month \”StoreFiles“的原始文件夹路径,并将其用作新输出的日期吗?
从某种意义上说,我正在努力做到以下几点: “C:\ Year \ Month \”StoreFiles“to”C:\ Store \ Month-Year \“StoreFiles”
也许我应该将文件夹路径指定为变量并相应地使用它作为新输出?
还是我应该考虑采取另一种方式来做这件事。
答案 0 :(得分:0)
尝试类似这样的事情
$dirroot="C:\temp\Root"
$store="C:\store"
Get-ChildItem $dirroot -file -Recurse |
where FullName -match ([Regex]::Escape($dirroot) + "\\\d{4}\\\d{1,2}\\" + [Regex]::Escape($_.Name)) |
% {
$elements=$_.FullName.Replace($dirroot, '').Split('\')
New-Item -ItemType Directory -Path "$store\$($elements[2])-$($elements[1])" -Force
Copy-Item $_.FullName "$store\$($elements[2])-$($elements[1])\$($elements[3])"
}
答案 1 :(得分:0)
你不能用这样的东西吗?
$ DateInfo =''| select-object -Property'年','月'
$File = 'c:\2014\may\filename.txt'
$TopFolderpath = [io.Path]::GetDirectoryName($File)
$TopFolderName = [io.Path]::GetFileName($TopFolderpath)
$DateInfo.Month = $TopFolderName
$Subfolderpath = [io.Path]::GetDirectoryName($TopFolderpath)
$SubFolderName = [io.Path]::GetFileName($Subfolderpath)
$DateInfo.Year = $SubFolderName
$DateInfo