我想从一个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"
这只是复制好的文件,但是整个将它复制到每月新建的文件夹都丢失了...我根本就没有线索
答案 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
}