删除除指定文件之外的多个文件夹的内容?

删除除指定文件之外的多个文件夹的内容?

如何删除除特定文件之外的多个文件夹的内容?

例如,我有多个包含相同文件的文件夹,如下所示:

文件夹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

用人类语言来说:
对于每个子目录(在您调用此批处理脚本的文件夹中)执行循环体中的命令:
循环体将文件设置为只读和系统,
然后删除所有内容(非只读和系统),
最后重置文件的属性。

答案4

相关内容