Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.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,我正在尝试删除一个文件夹中的所有文件,但有一个文件夹名为pictures,我想保留它,但不知道怎么做。我使用下面的脚本,它删除文件夹中的所有内容 if ($message -eq 'y') { get-childitem "C:\test" -recurse | % { remove-item $_.FullName -recurse } }一种解决方案是使用以下方法: Get-ChildItem -Path "c:\test" -Recurse | Where-Object { $

我正在尝试删除一个文件夹中的所有文件,但有一个文件夹名为pictures,我想保留它,但不知道怎么做。我使用下面的脚本,它删除文件夹中的所有内容

 if ($message -eq 'y')
 {
 get-childitem "C:\test" -recurse | % { 
remove-item $_.FullName -recurse 
}


}

一种解决方案是使用以下方法:

Get-ChildItem -Path "c:\test" -Recurse | Where-Object { $_.FullName -cnotmatch "\\Pictures($|\\)" -and (Get-ChildItem $_.FullName -Include "Pictures" -Recurse).Length -eq 0 } | Remove-Item -Recurse -ErrorAction SilentlyContinue;
我想一定有一种更优雅的方式来做到这一点。这就是它的作用:它递归地枚举C:\test文件夹中的所有文件(
Get ChildItem
),然后使用
Where Object
从结果列表中删除所有项目,其中路径包含要排除的目录(使用正则表达式语法指定)或者当问题项具有包含要排除的文件或目录的子项时。生成的列表被馈送到
删除项
,以便删除。
-ErrorAction SilentlyContinue
开关用于防止通过递归删除记录错误

Get-ChildItem $PSScriptRoot -Force| Where-Object {$_.Name -ne "Pictures"} | Remove-Item -Recurse

我刚试过这个,它对我有效。如果您想更改已删除的内容,只需更改“图片”。这将使用$PSScriptRoot作为路径,这是Powershell脚本的执行路径。您可以将其重命名为要删除的路径。

我收到以下错误:找不到接受参数“-”的位置参数错误在[Remove Item]上抱歉,这是一个输入错误。但这并不是我回答的唯一问题——因为我们在这里进行递归,如果深入目录结构,它也可能删除图片。例如,C:\test\Pictures不会被删除,但是当“other”被删除时,C:\test\other\Pictures会被删除。这可以接受吗?我有像C:\user\transactions\test\u trans\tab这样的结构,里面有文件和图片文件夹,所以我想保留所有的文件夹结构,只是想删除标签里除了图片文件夹以外的内容。我不知道怎么做,我正在尝试——目前为止运气不好。如果我在接下来的30分钟内找不到解决方案,我将撤销/删除我的答案。根据我收集的信息,OP希望在任意目录深度运行此操作。如果目录结构类似于\dir1\dir2\Pictures,则“dir2”将被删除,即使它包含一个名为“Pictures”的目录。这将删除第一个名为“Pictures”的目录以外的所有内容/根/图片-仍将存在/根目录/文件夹/图片-将不会。这是正确的。我在想OP想要删除除任意文件夹深度的图片以外的所有内容(请参阅“我有一个结构…”注释),但我可能弄错了。幸好我没有决定:)