Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 删除除某个文件之外的旧文件。正在删除目录_Powershell - Fatal编程技术网

Powershell 删除除某个文件之外的旧文件。正在删除目录

Powershell 删除除某个文件之外的旧文件。正在删除目录,powershell,Powershell,我有一个脚本,可以删除超过14天的文件,除非该文件名为test.dll 问题是,如果文件夹的时间超过14天,但文件是年轻的,比如说两天,那么文件夹和文件将被删除。如果文件存在,如何修复此问题,使文件夹不会被删除 该文件可以位于树中的任何子目录中。基本上,我希望它删除所有超过14天的文件和文件夹,除了它位于子目录结构中的test.dll 以下是我使用的脚本: $Now = Get-Date $Days = "14" $TargetFolder = "E:\Web2\testdir" $Extens

我有一个脚本,可以删除超过14天的文件,除非该文件名为
test.dll

问题是,如果文件夹的时间超过14天,但文件是年轻的,比如说两天,那么文件夹和文件将被删除。如果文件存在,如何修复此问题,使文件夹不会被删除

该文件可以位于树中的任何子目录中。基本上,我希望它删除所有超过14天的文件和文件夹,除了它位于子目录结构中的
test.dll

以下是我使用的脚本:

$Now = Get-Date
$Days = "14"
$TargetFolder = "E:\Web2\testdir"
$Extension = "*.*"
$LastWrite = $Now.AddDays(-$Days)

#---- get files based on lastwrite filter and specified folder ----!
$Files = Get-ChildItem $TargetFolder -Exclude "test.dll" -Recurse |
         Where {$_.LastWriteTime -le "$LastWrite"}

#---- For each file in $TargetFolder folder, run a foreach loop and delete the file
if ($Files) {
    foreach ($File in $Files) {
        if ($File -ne $null) {
            Write-Host "Deleting File $File" -ForegroundColor "DarkRed"
            Remove-Item $File.FullName -Recurse -Force -ErrorAction SilentlyContinue | Out-Null
        } else {
            Write-Host "No more files to delete!" -ForegroundColor "Green"
        }
    }
} else {
    Write-Host "There are no files older than $Days days old in $TargetFolder" -ForegroundColor "Green"
}

收集文件列表时,将
-File
参数传递给
Get ChildItem

$Files = Get-ChildItem $TargetFolder -File -Exclude "test.dll" -Recurse

在使用PowerShell v3之前,请使用
。|Where Object{-not$\PSIsContainer}
而不是
-File
参数。为了删除空文件夹,我在脚本中最后一个else下面添加了此代码。我不知道这是否是最干净的方法,但它似乎有效。好的-我在这一行添加了-not$\u.psicontainer:$Files=Get ChildItem$TargetFolder-Exclude“upd.info.raf”-Recurse | Where{(-not$\u.psicontainer)-和($\u.LastWriteTime-le“$LastWrite”)}这很有效。该文件保存在子目录中,但所有旧文件都已消失。唯一的问题是我留下了数千个空目录。有没有办法也删除空目录?那些符合14天龄标准的?