在复制期间不重命名文件而不是复制到目录

时间:2014-12-15 16:10:51

标签: powershell

我正在使用以下内容将文件复制/移动到存档文件夹中。

稍后它将适用于下拉ISS日志并扩展为压缩它们。

我的问题是:

Copy-Item $Somefile –Destination $SomeLocation

在复制期间重命名的文件中的结果代替了我想要复制到的目录。

我已经添加了一些测试路径语句来为我创建目录,但我知道PS应该可以通过额外的开关或定义来做到这一点吗?

#Declare Source and Destination
$Dest   = $env:USERPROFILE+"\Desktop\H drive"
$SourceLocation = “H:”

ForEach ($SourceSubDir In Get-ChildItem $SourceLocation -Directory){

        #Various Sub Directories Transposed to Destination
        $DestSubDir = $SourceSubDir.Fullname.Replace($SourceLocation, $Dest)

        #Create a Filtered List of Files
        $TargetFiles = Get-ChildItem $SourceSubDir.FullName  

        #Loop Through and Move Filtered Files
        ForEach($File In $TargetFiles){
            $LastMonth = $((Get-Date).AddMonths(-1))
            $DateModifiedDir = $($DestSubDir+'\'+$LastMonth.ToString('yyyy\,M')+'Archive')



            If($File.LastWriteTime.Month -eq $LastMonth.Month){

                #Create Subdirectory if not Existant
                If(-Not(Test-Path $DestSubDir)){
                   New-Item $DestSubDir -ItemType Directory
                }


                #Create Date Modified Subdirectory if not Existant
                If(-Not(Test-Path $DateModifiedDir)){
                    New-Item $DateModifiedDir -ItemType Directory
                }


                Copy-Item $File.FullName –Destination $DateModifiedDir -WhatIf
            }

        }

}

1 个答案:

答案 0 :(得分:2)

如果目标是文件夹:始终附加一个尾部反斜杠,以防止在目标文件夹丢失的情况下重命名复制的项目。

$dst = "$env:USERPROFILE\Desktop\H drive"
$src = "H:"

Get-ChildItem $src | Copy-Item -Destination "$dst\"

但是,查看您的脚本不会robocopy成为此任务的更好选择吗?

$src   = 'H:\'
$dst   = "$env:USERPROFILE\Desktop\H drive\{0:yyyy,MM}" -f $now.AddMonths(-1)

$now   = Get-Date
$start = $now.AddMonths(-1).ToString("yyyyMM01")
$end   = $now.AddDays(-($now.Day)).ToString("yyyyMMdd")

& robocopy $src $dst /s /maxage:$start /minage:$end