脚本每月将文件复制到目录

时间:2015-12-07 11:11:36

标签: windows powershell batch-file

我想从一个Windows共享(可以是1-10个文件,相同的创建日期)中复制几个.txt文件到目标文件夹,该文件夹应该在当前月份之后命名。

source: \\sharename\folder\file01.txt
target: \\sharename\folder\December\file01.txt

将此归档的最快方法是什么?

到目前为止我所拥有的:

Get-ChildItem -Path "\\sharename\folder\" |
    Where-Object { $_.LastWriteTime -lt (get-date).AddDays(-3) } |
    Copy-Item -Destination "\\sharename\folder"

这只是复制好的文件,但是整个将它复制到每月新建的文件夹都丢失了...我根本就没有线索

3 个答案:

答案 0 :(得分:1)

Get-Date -UFormat "%B"

会为您提供完整的月份名称(有关详细信息,请参阅here

然后你可以像这样使用它:

#store month name
$month = Get-Date -UFormat "%B"

#build destination path
$destination = "\\sharename\folder\$month\"

#creates the directory if it does not exist
if(-not (Test-Path $destination)) {
    New-Item $destination -ItemType Directory | Out-Null
}

#copies the item
Copy-Item -Destination "\\sharename\folder\$month\"

答案 1 :(得分:0)

批量我相信你可以做这样的事情

forfiles -p "\\sharename\folder\" -s -m *.txt /D -30 /C "cmd /c move @file "\\sharename\folder\December\" 

这应该将超过30天的所有.txt文件移动到目标文件夹。但是,要想自动创建当前月份之后命名的文件夹,我需要更多。但如果“日期”没问题,你可以这样做。

set datetimef=%date:~-4%.%date:~3,2%.%date:~0,2% %time:~0,2%:%time:~3,2%:%time:~6,2%
if not exist "\\sharename\folder\%datetimef%" mkdir "\\sharename\folder\%datetimef%"

这将创建一个像“ddmmyyyy”这样的文件夹。您可以通过删除一些“时间:~x,x%”部分来自定义它......

答案 2 :(得分:0)

怎么样......

$Local:LastMonthTimeStamp = Get-Date).AddMonths(-1).ToString("yyyyMM")
# as string like "201511" for last month
$Local:SourceBaseDir      =  "\\Server\Share\Folder"
$Local:SourceFileName     =  "*.txt"
$Local:TargetBaseDir      =  "\\Server\Share\ArchiveFolder"
$Local:TargetDirectory    =  (New-Item -Path (Join-Path -Path$TargetBaseDir -ChildPath $LastMonthTimeStamp)  -Type Container -Force).FullName
# creates the monthly archive folder and returns the target path
# like: \\Server\Share\ArchiveFolder\201511

Get-ChildItem -Path $SourceBaseDir -Filter $SourceFileName | Where-Object { 
    ((($_.LastWriteTime).ToString("yyyyMM")) -like $LastMonthTimeStamp) } | ForEach-Object { 
    Copy-Item -Path $_.FullName -Destination$TargetDirectory -Force
}