【发布时间】:2020-07-23 05:55:32
【问题描述】:
为清晰起见进行了编辑。 我想运行一个脚本来删除我的旧音乐目录中的空文件夹和子文件夹,但我遇到了一个我不知道的问题,因为我是新手。一些文件夹已被删除,如果我创建一个新的空文件夹,它将被删除。问题似乎是某些文件夹中的文件未显示在 Windows 资源管理器上,但脚本可以看到,如下所示的错误证明了这一点。此外,我可以手动删除文件夹,我只是想避免数小时删除数百个文件夹并在途中学习一些东西。
由于我是 Stack Overflow 的新手,我无法内联发布图像,因此这些链接是 Windows 资源管理器窗口的图像,显示文件夹为空 Image of empty folder in Windows Explorer 和 VS Code 自动完成不应该的文件的屏幕截图存在autocomplete of invisible files。我似乎找不到有关不断出现的权限错误的任何信息。我已将根文件夹和各个子文件夹设置为所有人拥有,并且可以完全控制我的机器,但这并没有什么不同。我也以管理员身份运行 PowerShell,但它仍然没有区别。这是一个我希望学习的个人项目,我不打算使用这个免费的代码编写服务,我只需要一些帮助来理解正在发生的事情。
问题似乎更多是关于不可见文件及其对实际删除文件夹的权限。
这些是我从互联网上找到的各种脚本,但对文件夹没有影响
$MusicPath = "C:\Users\Lewis\Desktop\Extraction_Test\Music_Copy"
do {
$dirs = Get-ChildItem $MusicPath -directory -recurse | Where-Object { (Get-ChildItem $_.fullName -Force).count -eq 0 } | Select-Object -expandproperty FullName
$dirs | Foreach-Object { Remove-Item -force -recurse }
} while ($dirs.count -gt 0)
Get-ChildItem $MusicPath -Directory | Where-Object {-NOT $_.GetFiles("*","AllDirectories")} | Remove-Item
此脚本来自下面的评论,但由于相同的权限错误而无法删除空文件夹,并且它将包含 20 个 mp3 文件的文件夹识别为空
$Parent = 'C:\Users\Lewis\Desktop\Extraction_Test\Music_Copy' # CHANGE THIS TO YOUR DESIRED FOLDER!!! #
$Dirs = Get-ChildItem -Path $Parent -directory -Recurse
foreach ($item in $Dirs) {
if ((get-childitem $item.Fullname | measure-object | select -ExpandProperty count) -eq '0') {
write-verbose -Message "The folder $($item.Fullname) is empty" -Verbose
remove-item $item.Fullname -Verbose
}
}
这一行是看能不能直接删除文件夹
Remove-Item -Path "C:\Users\Lewis\Desktop\Extraction_Test\Music_Copy\Clinton Sparks\SXSW 2009 Showcasing Artists\"
它导致了以下错误消息,我在这里只显示了一个,但是对于每个不可见的文件都会重复。
Remove-Item : 无法删除项目 C:\Users\Lewis\Desktop\Extraction_Test\Music_Copy\Clinton Sparks\SXSW 2009 Showcasing Artists\AlbumArtSmall.jpg:您没有足够的访问权限来执行此操作。 在 D:\Respositories\BatchFiles\Delete_Empties.ps1:18 char:1 + 删除项目-路径“C:\Users\Lewis\Desktop\Extraction_Test\Music_Copy\ ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : PermissionDenied: (AlbumArtSmall.jpg:FileInfo) [Remove-Item], IOException + FullyQualifiedErrorId : RemoveFileSystemItemUnAuthorizedAccess,Microsoft.PowerShell.Commands.RemoveItemCommand
下面的这一行将删除该文件夹,但是当我将-force 开关添加到上述代码之一时,它仍然什么都不做。
remove-item -force -recurse -path "C:\Users\Lewis\Desktop\Extraction_Test\Music_Copy\Clinton Sparks\SXSW 2009 Showcasing Artists\"
我确实尝试使用此代码将空文件夹移动到不同的目录,但它再次对受影响的文件夹没有任何作用
Get-ChildItem -Path $MusicPath -Recurse | Move-Item -Destination $NewAlbumPath
我也尝试过这个 .bat 文件,但没有成功,我确实在 rmdir 之后添加了 /S 开关,但随后它尝试删除包含我想要保留的文件的文件夹。
@echo off
setlocal enableextensions disabledelayedexpansion
for /f "delims=" %%a in ('dir C:\Users\Lewis\Desktop\Extraction_Test\Music_Copy /s /b /ad ^| sort /r') do 2>nul rmdir "%%~fa"
希望这更清楚,我的问题是有道理的。如果有任何人可以向我指出可以帮助我解决此问题的资源,那将是向前迈出的一步。
【问题讨论】:
-
你能澄清一下你需要什么帮助吗?您要删除所有没有内容的目录吗?还是要删除不包含任何内容和/或“不可见”内容的目录?如果是后者,我们如何确定究竟是什么构成了“隐形”内容?目前,尤其是您没有提供代码,而且这不是免费的代码编写服务,您的问题离题了。
-
可能重复:stackoverflow.com/a/11005300/175063 我知道提到了 PowerShell,但你的标签中也有 Batch。
-
您的问题不是很清楚您想要做什么,但是您对事件的描述建议您应该尝试以提升的权限运行您的脚本。你试过吗?
-
道歉不够清楚。我想删除音乐目录中的所有空文件夹和子文件夹以清除它。问题是,如果我在 Windows 资源管理器中查看该文件夹,它显示为空(链接 1 中的图片),但似乎有 VS Code 可以看到的不可见文件(链接 2 中的图片)。我尝试以管理员身份运行 PowerShell,并将音乐文件夹的所有权更改为“所有人”,并赋予该用户完全控制权。在下一篇文章中继续。
-
我确实尝试使用 #Remove-Item -Path "C:\Users\Lewis\Desktop\Extraction_Test\Music_Copy\Clinton Sparks\SXSW 2009 Showcasing Artists\" 作为实验,我得到了以下结果下一条评论中的错误
标签: powershell directory permissions