我需要删除所有文件和文件夹,但根文件夹中的一个文件和子文件夹中的另一个文件除外。此外,文件名作为参数作为脚本参数传递给逗号分隔的字符串,例如“ file1.txt,Subfolder \ file2.txt”。
我正试图做这样的事情,
$Path = "C:\\Delete\\"
$Argument= "file1.txt,Subfolder\\file2.txt"
$ExcludedFiles = [string]::Join(',', $Argument);
$files = [System.IO.Directory]::GetFiles($Path, "*", "AllDirectories")
foreach($file in $files) {
$clearedFile = $file.replace($Path, '').Trim('\\');
if($ExcludedFiles -contains $clearedFile){
continue;
}
Remove-Item $file
}
这样做,所有文件夹都将保留,所有文件都将被删除。 有人可以提出建议,因为我在执行此操作时遇到困难。
答案 0 :(得分:0)
最简单的方法是使用-Exclude
中的get-childitem
参数。
以下是排除文件的示例:
Get-ChildItem C:\Path -Exclude SampleFileToExclude.txt| Remove-Item -Force
使用通配符排除具有特定扩展名的文件:
Get-ChildItem C:\Path -Exclude *.zip | Remove-Item -Force
以递归方式获取所有文件,并排除相同的文件:
Get-ChildItem C:\Path -Recurse -Exclude *.zip | Remove-Item -Force
在同一命令中按您的意愿排除项目列表:
Get-ChildItem C:\Path -Recurse -Exclude *.zip, *.docx | Remove-Item -Force
您甚至可以使用array和where条件:
$exclude_ext = @(".zip", ".docx")
$path = "C:\yourfolder"
Get-ChildItem -Path $path -Recurse | Where-Object { $exclude_ext -notcontains $_.Extension }
然后您可以使用Remove-Item
希望有帮助。