使用路径作为变量使用PowerShell组织文件?

时间:2017-01-14 00:45:44

标签: powershell

我有一个脚本,根据修改日期将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”

也许我应该将文件夹路径指定为变量并相应地使用它作为新输出?

还是我应该考虑采取另一种方式来做这件事。

2 个答案:

答案 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