Отредактировано для наглядности. Я хочу запустить скрипт для удаления пустых папок и подпапок в моем старом каталоге musi c, но я столкнулся с проблемой, которую не могу понять, поскольку я новичок в этом. Некоторые из папок были удалены, и если я создам новую пустую папку, она будет удалена. Кажется, проблема в том, что в некоторых папках есть файлы, которые не отображаются в Windows Explorer, но обнаруживаются сценарием, о чем свидетельствует ошибка, показанная ниже. Кроме того, я могу удалить папки вручную, я просто пытаюсь избежать нескольких часов удаления сотен папок и узнать что-то в пути.
Поскольку я новичок в переполнении стека, я не могу опубликовать изображения встроены, поэтому эти ссылки относятся к изображениям Windows окна обозревателя с пустой папкой изображение пустой папки в Windows Explorer и снимком экрана с VS Code, автоматически заполняющим файлы, которые не должны существовать автозаполнение невидимых файлов . Я не могу найти информацию об ошибках разрешения, которые продолжают появляться. Я установил, что папка root и отдельные подпапки будут принадлежать всем с полным контролем на моей машине, но это не имеет значения. Я также запускаю PowerShell от имени администратора, но это все равно не имеет значения. Это личный проект, в котором я надеюсь учиться, и я не собираюсь использовать этот бесплатный сервис для написания кода, мне просто нужно немного помочь понять, что происходит.
Проблема, похоже, больше связана с невидимыми файлами и их правами на фактическое удаление папок.
Это различные скрипты, которые я нашел по всему inte rnet, но они не влияют на папки
$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 + Remove-Item -Path "C: \ Users \ Lewis \ Desktop \ Extraction_Test \ Music_Copy \ ... + ~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~ + CategoryInfo: PermissionDenied: (AlbumArtSmall.jpg: FileInfo) [Remove-Item], IOException + FullyQualifiedErrorId: RemoveFileSystemItemUnAuthorizedAccess, Microsoft.PowerShell.Commands.RemoveItem26om25 * 10
* Эта строка ниже удалит папку, но когда я добавлю переключатель
-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, я добавил ключ / S после rmdir, но затем он попытался удалить папки с файлами, которые я хочу сохранить.
@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"
Надеюсь, это понятнее, и моя проблема имеет смысл. Если кто-то может указать мне ресурс, который может помочь мне Если решить эту проблему, это будет шагом вперед.