如何删除除特定文件之外的多个文件夹的内容?
例如,我有多个包含相同文件的文件夹,如下所示:
文件夹1:
- 文件1
- 文件2
- 文件3
文件夹2
- 文件1
- 文件2
- 文件3
文件夹3
- 文件1
- 文件2
- 文件3
ETC。
我想删除每个文件夹中除 File1 和 File3 之外的所有文件。我可以使用 Powershell 执行此操作吗?
编辑1
谢谢 Crom!你们太棒了!我们已经知道如何删除这些文件了。但是,我忘了说我还需要删除其他文件夹。
例如,我的文件夹结构如下。
C:\Users\myname\Desktop\project1\english\folder1\file1
C:\Users\myname\Desktop\project1\english\folder1\file2
C:\Users\myname\Desktop\project1\english\folder1\file3
C:\Users\myname\Desktop\project1\english\folder2\file4
C:\Users\myname\Desktop\project1\english\folder2\file5
C:\Users\myname\Desktop\project1\chinese\folder1\file1
C:\Users\myname\Desktop\project1\chinese\folder1\file2
C:\Users\myname\Desktop\project1\chinese\folder1\file2
C:\Users\myname\Desktop\project1\chinese\folder2\file4
C:\Users\myname\Desktop\project1\chinese\folder2\file5
目标:删除除以下内容之外的所有内容:
C:\Users\myname\Desktop\project1\english\folder1\file1
C:\Users\myname\Desktop\project1\chinese\folder1\file1
答案1
您可以在 PowerShell 中执行如下操作:
$toKeep = "File1", "File3"
gci startFolder -Recurse | ? { !$_.PSIsContainer } | ? { $toKeep -notcontains $_.Name } | remove-item -WhatIf
-WhatIf
当您满意时,它就会做您想让它做的事。
答案2
您可以通过隐藏想要保留的文件来实现此目的,以下是我在网上找到的一些命令:
通过 CMD 尝试此操作:
对于/f“delims=”%i在('dir“My Dir \ *。log”/ b / s')中执行attrib + h“%i”
对于/f“delims=”%i在('dir“My Dir”/ b / s')中执行del“%i”/ q rmdir / s 对于/f“delims=”%i在('dir“My Dir”/ b / s / ah')中执行attrib -h“%i”
首先,隐藏您想要保留的文件(使用文件的名称而不是 *.log)。
第二行删除“My Dir”中的所有文件。
然后从特定文件中删除隐藏属性。
我自己试过了,它有效。
祝你好运。
答案3
@ECHO OFF
FOR /D %%X IN (*.*) DO CALL :loopbody "%%X"
REM Don't "fall through" to :loopbody.
GOTO :EOF
:loopbody
ATTRIB +r +s %1\file1.ext
ATTRIB +r +s %1\file3.ext
DEL %1\*.*
ATTRIB -r -s %1\file1.ext
ATTRIB -r -s %1\file3.ext
GOTO :EOF
用人类语言来说:
对于每个子目录(在您调用此批处理脚本的文件夹中)执行循环体中的命令:
循环体将文件设置为只读和系统,
然后删除所有内容(非只读和系统),
最后重置文件的属性。