复制最近 2 天内修改的文件
Copy files modified in last 2 days
我想在文件夹之间复制文件。仅在当天和前一天 修改(包含新条目的 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"
}
}
怎么了 - 有什么建议吗?
您需要将日期与 -gt
进行比较,否则您正在寻找在那个确切时间复制的文件。
请注意,执行 (Get-Date).AddDays(-1)
是完全有效的,但会为您提供过去 24 小时内修改过的任何内容。
$DestinationFolder = "\Oracle\MP\"
$EarliestModifiedTime = (Get-date).AddDays(-1)
$Files = Get-ChildItem "D:\Shares\WinCAP Data\DAYPROT\OFS-222_2\*.csv"
foreach ($File in $Files) {
if ($File.LastWriteTime -gt $EarliestModifiedTime)
{
Copy-Item $File -Destination $DestinationFolder
Write-Host "Copying $File"
}
else
{
Write-Host "Not copying $File"
}
}
如果您不想写出 "Copying ..." 和 "Not Copying ...",那么您可以稍微简化一下。
$DestingationFolder = "\Oracle\MP\"
$EarliestModifiedTime = (Get-date).AddDays(-1)
Get-ChildItem -File |? { $_.LastWriteTime -gt $EarliestModifiedTime } | Copy-Item -Destination $DestingationFolder
最后,如果您想复制自昨天开始(例如午夜开始)以来的任何内容,请更改以下行:
$EarliestModifiedTime = (Get-date).AddDays(-1).Date
@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"
}
}
我想在文件夹之间复制文件。仅在当天和前一天 修改(包含新条目的 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"
}
}
怎么了 - 有什么建议吗?
您需要将日期与 -gt
进行比较,否则您正在寻找在那个确切时间复制的文件。
请注意,执行 (Get-Date).AddDays(-1)
是完全有效的,但会为您提供过去 24 小时内修改过的任何内容。
$DestinationFolder = "\Oracle\MP\"
$EarliestModifiedTime = (Get-date).AddDays(-1)
$Files = Get-ChildItem "D:\Shares\WinCAP Data\DAYPROT\OFS-222_2\*.csv"
foreach ($File in $Files) {
if ($File.LastWriteTime -gt $EarliestModifiedTime)
{
Copy-Item $File -Destination $DestinationFolder
Write-Host "Copying $File"
}
else
{
Write-Host "Not copying $File"
}
}
如果您不想写出 "Copying ..." 和 "Not Copying ...",那么您可以稍微简化一下。
$DestingationFolder = "\Oracle\MP\"
$EarliestModifiedTime = (Get-date).AddDays(-1)
Get-ChildItem -File |? { $_.LastWriteTime -gt $EarliestModifiedTime } | Copy-Item -Destination $DestingationFolder
最后,如果您想复制自昨天开始(例如午夜开始)以来的任何内容,请更改以下行:
$EarliestModifiedTime = (Get-date).AddDays(-1).Date
@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"
}
}