需要一个Powershell脚本,该脚本会将文件夹和文件从一个位置移动到另一个位置

用户4432997

需要一个Powershell脚本,该脚本会将文件夹和文件从一个位置移动到比x天数长的旧位置,但某些文件夹被豁免。

还需要具有通过电子邮件发送其移动的文件和文件夹列表的功能。

我可以移动文件夹中的文件,但是我不确定如何移动整个文件夹。

到目前为止,这是我整理的一些代码,任何建议都很好

Set-ExecutionPolicy RemoteSigned

#----- define parameters -----#
#----- get current date ----#
$Now = Get-Date
#----- define amount of days ----#
$Days = "7"
#----- define folder where files are located ----#
$TargetFolder = "C:\test"
$TargetPath = "C:\test5"

#----- define extension ----#
$Extension = "*.*"
#----- define LastWriteTime parameter based on $Days ---#
$LastWrite = $Now.AddDays(-$Days)

#----Exclusion List ----#
$exclude =@('test1', 'test2')


#----- get files based on lastwrite filter and specified folder ---#
$Files = Get-Childitem -path $TargetFolder -Include $Extension -Recurse | Where {$_.LastWriteTime       -le "$LastWrite"}  -and $_Name -ne $exclude | foreach ($_)} #-


foreach ($File in $Files)
    {
    if ($File -ne $NULL)
        {
        write-host "Deleting File $File" -ForegroundColor "DarkRed"
        Move-Item $File.FullName $TargetPath -force
        }
    else
        {
        Write-Host "No more files to delete!" -foregroundcolor "Green"
        }
    }
马特

PowerShell v3或更高版本支持的简写版本。这会找到LastWriteTime7天之前的所有文件夹并将其移动。

$LastWrite = (Get-Date).AddDays(-7)
gci c:\temp -Directory -Recurse | ?{$_.LastWriteTime -le $LastWrite} | select -expand fullname | %{Move-Item $_ $TargetPath}

如果您只查看文件夹时间,那么省略逻辑就不会有文件排除的意义。相同的代码,但更易于阅读:

$LastWrite = (Get-Date).AddDays(-7)
Get-ChildItem $TargetFolder | Where-Object{$_.LastWriteTime -le $LastWrite} | Select-Object -ExpandProperty FullName | ForEach-Object{
    Move-Item $_ $TargetPath
}

警告

您尝试移动文件夹时可能会出现问题,并且以前可能已经移动了父文件夹。现在还没有真正的测试环境来进行检查。为了防万一,可以在复制之前进行一些测试。

If(Test-Path $_){Move-Item $_ $TargetPath}

电子邮件

使用电子邮件的起点是Send-MailMessage还有其他方法。

文件夹排除

如果您想省略某些文件夹,则有两种方法可以实现。如果您知道要忽略的整个文件夹名称,则可以$exclude =@('test1', 'test2')像已经拥有的那样添加它,并更改Where子句。

Where-Object{$_.LastWriteTime -le $LastWrite -and $exclude -notcontains $_.Name}

如果您不知道全名,并且可能$exclude只包含部分名称,则也可以使用一些正则表达式来做到这一点。

$exclude =@('test1', 'test2')
$exclude = "({0})" -f ($exclude -join "|")

#..... other stuff happens

Where-Object{$_.LastWriteTime -le $LastWrite -and $_.Name -notmatch $exclude}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将文件从一个位置移动到另一个位置并排除子文件夹

将对象从一个位置统一移动到另一个位置

将特定文件夹从一个位置复制到另一个Python

我将几个脚本文件从一个位置移动到另一个位置。我没有提到目的地中那些文件的名称

在Python中将文件从一个位置移动到另一个位置。收到DST错误

如何将具有特定扩展名的任何文件从一个位置批量移动到另一个位置?

将文件夹结构(无文件)从一个位置复制到另一个位置

AppleScript-将文件夹从一个位置复制到另一个位置时,排除某些文件

将切片项目从一个位置移动到另一个位置

使用XSLT 2将元素从一个位置移动到另一个位置

将 XAML 元素从一个位置移动到另一个位置

在Java中将对象从一个位置移动到另一个位置

将整行从一个位置移动到另一个位置

使用批处理文件将zip文件夹从一个位置移动到另一位置

同步两个文件夹,成功后将一个文件从一个位置复制到另一个

读取文件,然后使用 Powershell 脚本将内容从一个文件夹移动到另一个文件夹

搜索文件,在特定文件夹中找到该文件后,将该文件夹移动到另一个位置

将(用户输入)文件移动到另一个位置

在Python中将文件从一个位置复制到另一个位置

将数组元素从一个数组位置移动到另一个位置

如何让玩家从一个 x 位置移动到另一个位置?

如何在Java中将文件从一个位置移动到另一位置?

如何将文件从一个位置移动到另一位置?

在Windows C ++中将文件从一个位置移动到另一位置

Powershell根据名称在一个位置查找文件覆盖另一个位置

Shell脚本重命名并将文件从一个文件夹移动到另一个文件夹

Python脚本将特定文件从一个文件夹移动到另一个文件夹

Bash脚本将某些类型的文件复制到另一个位置

CSS div从一个位置到另一个位置