我想在文件夹之间复制文件。在当天和前一天修改(包含新条目的CSV文件)。
这是我的代码:
foreach ($file in (Get-ChildItem "D:\Shares\WinCAP Data\DAYPROT\OFS-222_2")) {
if ($file.LastWriteTime = (Get-Date).AddDays(-1)) {
Copy-Item -Path "D:\Shares\WinCAP Data\DAYPROT\OFS-222_2\*.csv" -Destination "\\Oracle\MP"
"copying $file"
} else {
"not copying $file"
}
}
有什么不对 - 有什么建议吗?
答案 0 :(得分:3)
您需要将日期与-gt
进行比较,否则您需要查找在该确定时间复制的文件。
请注意,执行(Get-Date).AddDays(-1)
完全有效,但会在过去24小时内为您提供任何修改。
$DestingationFolder = "\\Oracle\MP\"
$EarliestModifiedTime = (Get-date).AddDays(-1)
$Files = Get-ChildItem "D:\Shares\WinCAP Data\DAYPROT\OFS-222_2\*.csv" -File
foreach ($File in $Files) {
if ($File.LastWriteTime -gt $EarliestModifiedTime)
{
Copy-Item $File -Destination $DestingationFolder
Write-Host "Copying $File"
}
else
{
Write-Host "Not copying $File"
}
}
如果你不想写出"复制......"和#34;不复制......"然后你可以简化这一点。
$DestingationFolder = "\\Oracle\MP\"
$EarliestModifiedTime = (Get-date).AddDays(-1)
Get-ChildItem -File |? { $_.LastWriteTime -gt $EarliestModifiedTime } | Copy-Item -Destination $DestingationFolder
最后,如果您想在昨天(例如,开始时的午夜)开始复制任何内容,请更改以下行:
$EarliestModifiedTime = (Get-date).AddDays(-1).Date
答案 1 :(得分:-1)
@Mr Tree我还有一个相关的问题。
我每天都有几次新文件位于D:\ Shares \ WinCAP Data \ DAYPROT \ OFS-HT(位置1),固定名称为abcDD.MM.YYYY.csv(abc03.09.2015.csv)和我有一个服务,每隔10分钟调用我的powershell脚本。我之前在上面的帖子里做了你的建议。我的目标是:1。检查是否有名为abcDD.MM.YYYY.csv |的新文件2.将其重命名为abcDD.MM.YYYYHT.csv并将其移至“\ Oracle \ MP \ PURO \”(位置2)文件夹,我需要使用现有的当天重写它。
问题是如果文件已存在于位置2上,脚本不想移动它并重写它?谢谢提示。
$DestingationFolder = "\\Oracle\MP\PURO\"
$EarliestModifiedTime = (Get-date).AddDays(-1)
Get-ChildItem "D:\Shares\WinCAP Data\DAYPROT\OFS-HT\*.csv" | ?{!($_.fullname -match "HT\.csv")} | Rename-Item -NewName { $_.Name -replace "\.csv", "HT.csv" }
$Files = Get-ChildItem "D:\Shares\WinCAP Data\DAYPROT\OFS-HT\*.csv" -File
foreach ($File in $Files) {
if ($File.LastWriteTime -gt $EarliestModifiedTime)
{
Move-Item $File -Destination $DestingationFolder
Write-Host "Moving $File"
}
else
{
Write-Host "Not moving $File"
}
}