删除文件夹及其子文件夹中的所有文件


48

我想从文件夹结构中删除所有文件,所以我留下了一个空的文件夹结构。

这可以通过批处理或VBScript脚本来实现吗?

我尝试过一个非常基本的批处理命令,但这要求用户允许删除每个文件。这不是一个合适的解决方案,因为有数百个文件,这将随着时间的推移而大量增加。

你能提出什么建议?


你的意思是递归删除?这确实可以做到。喜欢的东西,rd /s /q "c:\folder a将执行中的所有文件和文件夹递归删除Folder A
Ramhound

我能做到,我不知道如何在powershell中编写脚本但是之前运行的PowerShell脚本。
BobJim 2014年

2
现在是学习的最佳时机,我会研究批处理和vbs语法以用于遗留目的,但要花更多时间学习PS。
MDMoore313 2014年

我还没有机会检查代码,虽然我确信它会起作用。我会回来为我的初始查询选择最合适的答案。
BobJim 2014年

我将第二个@BigHomie的推荐 - 我刚学会了一些PowerShell,我不得不说它非常整洁 - 不是太难,在任何编码器的武器库中都是一个好武器。我现在经常使用它。

Answers:


71

这可以使用PowerShell完成:

Get-ChildItem -Path C:\Temp -Include *.* -File -Recurse | foreach { $_.Delete()}

此命令获取每个子项,在每个子项上$path执行delete方法,并且非常快。文件夹结构保持不变。

如果您的文件没有扩展名,请使用

Get-ChildItem -Path C:\Temp -Include * -File -Recurse | foreach { $_.Delete()}

代替。

看起来-File参数可能是在PowerShell v2之后添加的。如果是这样,那么

Get-ChildItem -Path C:\Temp -Include *.* -Recurse | foreach { $_.Delete()}

它应该对具有扩展名的文件起作用。

如果它不起作用,请检查您是否拥有最新版本的Powershell


1
-Include *.*-Include .,大的区别!:-)
MDMoore313 2014年

Get-ChildItem -Path D:\ EmptyThisFolder -Include -File -Recurse | foreach {$ _。删除()}
BobJim 2014年

你为什么用-Include .?这就是问题所在。
MDMoore313 2014年

2
他们不能实施powershell --version吗?他们不能使用带有正数的版本号吗?这太疯狂了。关于如何查找程序版本号的问题超过1300个赞成
托马斯·韦勒

1
@demonicdaron它不应该; OP的问题是保留文件夹结构。
MDMoore313

21

您可以使用del命令执行此操作:

dir C:\folder
del /S *

/S开关是递归删除文件。


2
这只会删除文件但保留文件夹吗?
BobJim 2014年

5
是。您可以添加/P选项,这样它会要求您确认每次删除只是为了检查。
phoops 2014年

谢谢你生病了!希望能节省大量时间!
BobJim 2014年

3
是。要删除隐藏文件和系统文件,请attrib -s -r -h Folder\*.* /s /d在删除之前执行。对于权限使用takeown命令。
Jet

2
并且您可以使用/ Q 在使用通配符时要求确认。
Aylatan 2015年

17

简短的套件PowerShell。不确定它可以使用的最低版本的PS是什么。

Remove-Item c:\Tmp\* -Recurse -Force

1
好,易于。这样就可以了,而接受的答案却没有!
恶魔之夜

4

在原始问题的行之间阅读我可以提供您可以使用的替代BATCH代码行。运行时只会删除超过60天的文件。通过这种方式,您可以将其置于计划任务中,并在运行时删除您不需要的多余文件,而不是将整个目录吹走。如果您愿意,可以更改60到5天甚至1天。这不会删除文件夹。

forfiles -p "c:\path\to\files" -d -60 -c "cmd /c del /f /q @path"

感谢您的想法,但目前我认为“清空”过程将在一个非计划的特定时间框架内完成。我会保留未来的代码!干杯
BobJim 2014年

标题显示“删除文件夹及其子文件夹中的所有文件”,因此这不是解决方案。
AndersLindén于


3

使用PowerShell删除单个文件或文件夹。在powershell中执行Delete命令之前,我们需要确保您使用可以完全访问要删除的对象的帐户登录到服务器或PC。

例如: http //dotnet-helpers.com/powershell-demo/how-to-delete-a-folder-or-file-using-powershell/

使用PowerShell commnads删除文件

Remove-Item -Path“C:\ dotnet-helpers \ DummyfiletoDelete.txt”

上面的命令将执行并删除“C:\ dotnet-helpers”位置内的“DummyfiletoDelete.txt”文件。

使用PowerShell commnads删除所有文件

Remove-Item -Path“C:\ dotnet-helpers *。*”

使用PowerShell commnads删除所有文件和文件夹

Remove-Item -Path“C:\ dotnet-helpers *。*” - recurse

-recurse向下钻取并找到更多文件。该–recurse参数将允许PowerShell删除任何子项而无需请求权限。此外,可以添加-force参数以删除隐藏或只读文件。

使用-Force命令强制删除文件

使用PowerShell命令强制删除所有文件

Remove-Item -Path“C:\ dotnet-helpers *。*” - Force


1

使用PowerShell尝试此操作。在这个例子中,我想删除所有.class文件:

Get-ChildItem '.\FOLDERNAME' -include *.class -recurse | foreach ($_) {remove-item $_.FullName}

1
  1. 在Windows资源管理器中,选择包含所有文件和文件夹的根目录。

  2. 搜索 *

  3. 按类型排序(所有文件夹将位于顶部,所有文件位于下方)

  4. 选择所有文件,然后按Delete。

这将删除所有文件并保留目录结构。


1

删除当前目录和子目录中的所有文件,但保留文件夹结构。

/Q)开关用于询问用户是否可以删除

注意:尝试不使用/Q以确保您没有删除任何珍贵的东西。

del /S * /Q 

1

这是IMO最简单的方法

打开PowerShell,导航到目录(cd),那么

ls -Recurse * | rm

(噗)一切都没了......

如果要根据特定扩展名删除

ls -Recurse *.docx | rm

ls 列出目录

-Recurse 是一个告诉powershell进入任何子目录的标志

* 一切都说

*.doc 扩展名为.doc的所有内容

| 从左到右输出输出

rm 删除

所有其他答案似乎使这更加困惑而不是必要。


0
dir C:\testx\ -Recurse -File | rd -WhatIf
What if: Performing the operation "Remove File" on target "C:\testx\x.txt".
What if: Performing the operation "Remove File" on target "C:\testx\bla\x.txt".

-1

作为上述答案的补充,实际上不需要使用Get-Childitem并将结果传递给上述答案中的管道,因为-Include关键字包含在Remove-Item命令中

可以简单地说:

Remove-Item -Include“ ”“C:\ Temp”-Recurse

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.