用于从包含子文件夹的特定文件夹中删除文件夹和子文件夹的脚本

用于从包含子文件夹的特定文件夹中删除文件夹和子文件夹的脚本

我有一个文件夹(用户),里面装满了用户文件夹,我们用它来在用户之间进行临时传输。我希望能够安排一个脚本来清空用户文件夹的内容,而无需删除用户文件夹或更改权限。

有没有办法通过批处理文件执行此操作?我原本以为我可以使用类似以下方法:

删除/F \用户**.*

但那没有用。

请帮忙!

谢谢你!

答案1

您使用的是 Server 2012...您几乎没有理由使用批处理。

这里有一些 Powershell:

Foreach($_ In Get-ChildItem C:\Users -Recurse) 
{ 
    If(!$_.PSIsContainer) { Remove-Item $_.Fullname } 
}

这将删除 C:\Users 目录树中及之下的所有文件,但所有目录将保持完整。

编辑:

这个怎么样:

Foreach($_ In Get-ChildItem C:\Users)
{
    If($_.PSIsContainer)
    {
        Get-ChildItem $_.FullName -Recurse | Remove-Item
    }   
}

所以现在我们要做的就是获取 C:\Users 下的“第一级”目录列表,然后递归清除每个文件夹的内容,所以最后只剩下 C:\Users 和它下面的第一级子目录。

编辑:既然您提到您想更好地理解这一点,但对 Powershell 还不熟悉,我将更详细地解释上述脚本。

Get-ChildItem C:\Users基本上就像C:\> dir C:\Users在 DOS 中一样,但是 Powershell 以以下形式处理和返回所有内容对象,而不仅仅是简单的控制台输出。因此,第一行读取

Foreach($_ In Get-ChildItem C:\Users)

这意味着我们将对 C:\Users 中存在的每个“对象”进行循环。因为我们不是使用-Recurse此处的参数,Powershell 将仅返回 C:\Users 的一级目录列表,而不会深入到子目录。

If($_.PSIsContainer)是一个 If 语句,意思是“如果当前对象的“PSIsContainer”属性设置为 True,这只是一种说“如果这是一个目录”的花哨说法,那么就进入这个 if 循环。

因此,对于 下的每个子目录C:\Users,我们都会进入 If 循环。假设C:\Users下有三个子目录:C:\Users\joeC:\Users\kateC:\Users\bill。这些子目录下可能有任意数量的文件和子目录。

因此我们将进入 If 循环 3 次,因此每次看起来都会像这样:

Get-ChildItem <C:\Users\joe> -Recurse | Remove-Item

Get-ChildItem <C:\Users\kate> -Recurse | Remove-Item

Get-ChildItem <C:\Users\bill> -Recurse | Remove-Item

此行的作用是获取该子目录的内容,并-Recurse指定开关,以便它向下钻取到joekate和的所有子目录bill

然后它获取所有这些子对象并管道将它们添加到Remove-Item,你可以将 视为Remove-Item的一个别名del。它会删除所有内容。

合理?

相关内容