Работа с файлами и папками — PowerShell
- Статья
Перемещение по дискам PowerShell и управление элементами на них аналогично управлению файлами и папками на дисках Windows. В этой статье описывается выполнение конкретных задач по управлению файлами и папками с помощью PowerShell.
Перечисление всех файлов и папок в папке
Все элементы можно получить непосредственно в папке с помощью Get-ChildItem
. Для отображения скрытых и системных элементов добавьте необязательный параметр Force. Например, эта команда отображает непосредственное содержимое диска C:
PowerShell .
Get-ChildItem -Path C:\ -Force
Команда выводит список только непосредственно содержащихся элементов, аналогично использованию dir
команды в cmd.exe
оболочке UNIX или ls
в ней. Чтобы отобразить элементы во вложенной папке, необходимо указать параметр Recurse .
Следующая команда выводит список всех элементов на C:
диске:
Get-ChildItem -Path C:\ -Force -Recurse
Командлет Get-ChildItem
позволяет отфильтровать элементы с помощью параметров Path, Filter, Include и Exclude, но обычно осуществляется лишь фильтрация по имени. Вы можете выполнять сложную фильтрацию на основе других свойств элементов с помощью Where-Object
.
Следующая команда находит все исполняемые файлы в папке Program Files, которые в последний раз были изменены после 1 октября 2005 года и не имеют ни меньше 1 мб, ни 10 мегабайт:
Get-ChildItem -Path $env:ProgramFiles -Recurse -Include *. exe | Where-Object -FilterScript { ($_.LastWriteTime -gt '2005-10-01') -and ($_.Length -ge 1mb) -and ($_.Length -le 10mb) }
Копирование файлов и папок
Копирование выполняется с помощью командлета Copy-Item
. Следующая команда выполняет резервное копирование до C:\boot.ini
C:\boot.bak
:
Copy-Item -Path C:\boot.ini -Destination C:\boot.bak
Если целевой файл уже существует, то попытка копирования завершается неудачей. Чтобы перезаписать имеющийся целевой файл, используйте параметр Force.
Copy-Item -Path C:\boot.ini -Destination C:\boot.bak -Force
Эта команда работает, даже если целевой объект доступен только для чтения.
Так же выполняется и копирование папок. Эта команда копирует папку C:\temp\test1
в новую папку C:\temp\DeleteMe
Copy-Item C:\temp\test1 -Recurse C:\temp\DeleteMe
Можно также скопировать избранные элементы. Следующая команда копирует все .txt
файлы, содержащиеся в любом месте в C:\data
C:\temp\text
:
Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination C:\temp\text
Для копирования элементов файловой системы можно использовать и другие средства. Объекты XCOPY, ROBOCOPY и COM, такие как Scripting.FileSystemObject, работают в PowerShell. Например, можно использовать com-класс Scripting.FileSystem узла сценариев Windows для резервного копирования C:\boot.ini
в C:\boot.bak
:
(New-Object -ComObject Scripting.FileSystemObject).CopyFile('C:\boot.ini', 'C:\boot.bak')
Создание файлов и папок
Создание новых элементов работает одинаково на всех поставщиках PowerShell. Если поставщик PowerShell имеет несколько типов элементов ( например, поставщик FileSystem PowerShell различает каталоги и файлы), необходимо указать тип элемента.
Эта команда создает папку C:\temp\New Folder
:
New-Item -Path 'C:\temp\New Folder' -ItemType Directory
Эта команда создает пустой файл C:\temp\New Folder\file. txt
.
New-Item -Path 'C:\temp\New Folder\file.txt' -ItemType File
Важно!
При использовании параметра Force с командой New-Item
для создания папки, которая уже существует, она не перезапишет и не заменит папку. Будет просто возвращен имеющийся объект папки. Однако при использовании New-Item -Force
в уже существующем файле файл будет перезаписан.
Удаление всех файлов и папок в папке
Удалить вложенные элементы можно с помощью командлета
, однако он потребует подтверждения удаления, если элемент сам что-нибудь содержит. Например, при попытке удалить папку C:\temp\DeleteMe
, содержащую другие элементы, PowerShell запросит подтверждение перед удалением папки:
Remove-Item -Path C:\temp\DeleteMe Confirm The item at C:\temp\DeleteMe has children and the Recurse parameter wasn't specified. If you continue, all children will be removed with the item. Are you sure you want to continue? [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
Если вы не хотите запрашивать каждый содержащийся элемент, укажите параметр Recurse :
Remove-Item -Path C:\temp\DeleteMe -Recurse
Сопоставление локальной папки в качестве диска
Отобразить локальную папку можно с помощью команды New-PSDrive
. Следующая команда создает локальный диск P:
, корневым каталогом которого является локальный каталог Program Files, отображающийся только в сеансе PowerShell:
New-PSDrive -Name P -Root $env:ProgramFiles -PSProvider FileSystem
Как и в случае с сетевыми дисками, диски, сопоставленные в PowerShell, сразу же отображаются в оболочке PowerShell. Чтобы создать сопоставленный диск, видимый из проводник, используйте параметр Persist. Однако с параметром Persist можно использовать только удаленные пути.
Чтение текстового файла в массив
Одним из наиболее общих форматов хранения текстовых данных является файл, отдельные строки которого рассматриваются как отдельные элементы. Командлет Get-Content
используется для чтения всего файла за один шаг, как показано далее:
PS> Get-Content -Path C:\boot.ini [boot loader] timeout=5 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=AlwaysOff /fastdetect multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=" Microsoft Windows XP Professional with Data Execution Prevention" /noexecute=optin /fastdetect
Get-Content
обрабатывает данные, считанные из файла, как массив с одним элементом в каждой строке содержимого файла. Убедиться в этом можно, проверив свойство Length полученного содержимого:
PS> (Get-Content -Path C:\boot.ini).Length 6
Эта команда наиболее полезна для получения списков сведений в PowerShell. Например, можно сохранить список имен компьютеров или IP-адресов в файле C:\temp\domainMembers.txt
с одним именем в каждой строке файла. Вы можете использовать командлет Get-Content
, чтобы извлечь содержимое файла и поместить его в переменную $Computers
:
$Computers = Get-Content -Path C:\temp\DomainMembers.txt
Теперь переменная $Computers
представляет собой массив, содержащий в каждом элементе имя компьютера.
Как принудительно удалить папку в Windows 11
Наверняка вы к сталкивались с ситуацией, когда не удавалось удалить ненужную папку в Windows 11. А все из-за того, что папка или файл использовались каким-то приложением или на папку или файл были наложены какие-либо ограничения в части прав доступа, например папка являлась системной и Windows не разрешал её удалить. В этой статье мы рассмотрим несколько вариантов удаления «неудаляемых» папок и файлов при помощи стандартных средств Windows, а также стороннего программного обеспечения.
Способ 1. Удаляем не удаляемый файл/папку через командную строку (CMD)
Командная строка является одним из эффективных способов по принудительному удалению папок и фалов в ОС Windows 11.
Сперва запоминаем или копируем путь папки или файла, который хотим удалить. В нашем примере удалять будем папку «Work» (расположение «C:\Work»).
Теперь открываем командную строку с правами администратора одним из следующих способов: 1. Нажимаем «горячие» клавиши «Win+R», чтобы открыть окно «Выполнить», в котором указываем команду «cmd» в текстовом поле «Открыть». Затем, для того, чтобы открыть CMD с правами админа, нажимаем на клавиатуре клавиши «Ctrl+Shift+Enter».
2. Альтернативный способ запуска командной строки — через меню поиска Windows 11. Для этого нажимаем на меню «Пуск» (либо клавиши «Win+S») и в верхней поисковой строке вводим «cmd». Далее нажимаем на ссылку «Запуск от имени администратора».
Отлично! В появившемся окне CMD вводим следующую команду:
rmdir /s /q "Путь"
где «Путь» — расположение удаляемой папки или файла.
В нашем примере команда будет следующая:
rmdir /s /q C:\Work
Для выполнения команды не забываем нажать клавишу ввода «Enter».
Теперь папка будет удалена с ПК. Если в пути присутствуют проблемы, то добавляем двойные кавычки.
Способ 2. Удаляем не удаляемый файл/папку через безопасный режим
Если у вас нет понимания, каким приложением занята папка или файл, просто переходим в безопасный режим через перезагрузку ПК и удаляем оттуда. Безопасный режим предотвращает загрузку сторонних приложений, поэтому с большей долей вероятности папка будет доступна для удаления.
Существует несколько способов перехода в безопасный режим, рассмотрим один из них — нажимаем на клавиатуре клавиши «Win+R», указываем команду «msconfig» и нажимаем кнопку «ОК».
Запуститься окно «Конфигурация системы», в разделе «Параметры загрузки» отмечаем галочкой «Безопасны режим», параметр выбираем любой. Затем нажимаем кнопку «ОК» и подтверждаем перезагрузку, когда система запросит её.
В безопасном режиме находим папку, которую хотим удалить, щелкаем по ней правой кнопкой мыши и нажимаем на значок корзины, чтобы удалить. Либо нажимаем клавишу «Del» на клавиатуре.
Вот и все! Папка или файл будут удалены с вашего компьютера.
Способ 3. Удаляем не удаляемый файл/папку через приложение «Unlocker»
В сети Интернет можно скачать стороннее бесплатное приложение, которое называется — Unlocker. Оно сможет помочь с удалением и разблокировкой любых папок и файлов на ПК с Windows 11.
Итак, скачиваем, устанавливаем и запускаем приложение «Unlocker». При запуске появится проводник приложения, в котором выбираем папку, необходимую для удаления и нажимаем кнопку «ОК».
После нажатия на кнопку «ОК», появится небольшое окно, где в выпадающем списке выбираем команду «Delete» и затем нажимаем кнопку «ОК», чтобы завершить удаление файла или папки.
Unlocker разблокируем файл/папку и удалит её с вашего ПК.
Способ 4. Удаляем не удаляемый файл/папку через приложение «WinRar»
Вот небольшой лайфхак — архиватор WinRAR так же как и Unlocker обладает возможностью разблокировки файлов/папок, а как это сделать смотрим дальше в инструкции.
Сперва скачиваем сам WinRAR, если его у вас нет. Затем переходим в проводнике Windows 11 к папке (в нашем примере папка «Work»), которую хотим удалить. Щелкаем правой кнопкой мыши по папке, чтобы отобразить контекстное меню, в котором наводим мышь на пункт «WinRAR», а затем щелкаем на подпункт «Добавить в архив…».
Появится окно WinRAR «Имя и параметры архива», в этом окне находим раздел «Параметры архивации» и отмечаем галочкой пункт «Удалить файлы после архивации», это и есть небольшой лайфхак. Теперь нажимаем кнопку «ОК», чтобы WinRAR создал архив и удалил заблокированную папку с нашего ПК.
Вот так легко избавиться от заблокированных файлов и папок в Windows 11.
Как удалить папку «Несуществующие»
Я скачал и распаковал музыкальный альбом на диск D:. Затем я удалил его с помощью Проводника, и он, похоже, выполнил свою работу.
Однако папка все еще существует, поэтому я безуспешно пытался ее удалить. Папка называется «Zac Brown Band — Greatest Hits So Far…» и кажется, что она пуста.
Если я попытаюсь удалить его, появится сообщение «Не удалось найти этот элемент»
Я не могу переименовать его, и я получу тот же отчет.
Если я пытаюсь открыть его, он сообщает, что он недоступен.
Я открыл CMD от имени администратора, и папка отображается как каталог, но я не могу ее открыть, и CMD сообщает: «Система не может найти указанный путь». (Я использовал компакт-диск «Zac Brown Band — Greatest Hits So Far…»)
Я даже очистил остальную часть папки «Загрузки» и безуспешно попытался УДАЛИТЬ *.
Если я попробую rmdir, он скажет мне, что папка не пуста, но я не могу попасть в папку, чтобы увидеть.
Я попробовал DIR /x, но имя осталось прежним.
Я попробовал несколько программ для разблокировки, но все они пришли к одному и тому же выводу: папка не существует.
Но он отображается в Проводнике и в командной строке.
Посоветуйте пожалуйста.
- файлы-папки
При доступе к путям «стандартным» способом (через Win32) Windows всегда обрезает конечные точки пути по историческим причинам. Поэтому всякий раз, когда вы просите открыть foo...
, ОС вместо этого пытается открыть foo
, которого на самом деле не существует.
Вы можете обойти это, указав «путь NT» с префиксом \\?\
, что, скорее всего, является тем, как архиватор создал каталог в первую очередь:
rmdir "\\?\D:\Downloads\ Zac Brown Band - Лучшие хиты на данный момент ..."
(Многие файловые менеджеры и архиваторы используют этот метод, потому что он позволяет обойти ограничение длины в 256 символов, и они не всегда стараются не создавать «плохие» имена файлов. )
Этого также не произойдет, если вы явно указать, какой поток данных удалять: (это работает в Cmd, но не в PowerShell)
rmdir "Лучшие хиты на данный момент... :: $INDEX_ALLOCATION"
(Синтаксис имя_файла:имя_потока[:тип_потока]
. Все файлы хранят свои первичные данные в безымянном потоке типа $DATA, а каталоги имеют несколько потоков, но самый важный из них имеет тип $INDEX_ALLOCATION.)
2
Похоже на повреждение файловой системы. Откройте командную строку от имени администратора, затем введите
. Это попытается исправить проблемы в файловой системе.
Если не удается удалить папку-призрак, попробуйте создать новую папку с точно таким же именем и местоположением, что и у папки-призрака, а затем удалите ее.
РЕДАКТИРОВАТЬ: я провел несколько тестов и обнаружил, что встроенные инструменты Windows не могут обрабатывать имена, которые заканчиваются точкой ( .
). Вы можете удалить эту папку, открыв 7-Zip File Manager, найдите папку, выберите ее и нажмите Shift 9.0068 + Удалить . Это должно удалить застрявшую папку.
8
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но никогда не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie
.windows 10 — удаление папки из проводника, которой больше нет в файловой системе
Задавать вопрос
спросил
Изменено 3 года, 6 месяцев назад
Просмотрено 2к раз
Я удалил приложение с помощью официального MSI-пакета продукта, оно работало, как и ожидалось, но, похоже, оставило «фантомную» папку, которая блокирует мою следующую установку.
Я на 99% уверен, что смогу решить эту проблему, просто перезапустив хост, но в интересах поиска более плавного решения (давайте просто представим, что это производственный сервер, который нельзя быстро перезапустить) я подумал, что могу предоставить некоторую информацию вот и смотри что выяснится.
Некоторые примечания:
- Все команды выполнялись в командной строке с повышенными привилегиями.
- Моя учетная запись является членом группы локальных администраторов.
Путь к папке содержит информацию, позволяющую установить личность, и поэтому был отредактирован.
Попытка УДАЛИТЬ папку с помощью PowerShell (с повышенными правами)
-
[Remove-Item], ItemNotFoundException
-
Не удается найти путь «C:\ProgramData\FOLDER», так как он не существует
-
Разрешение запрещено: (C:\ProgramData\FOLDER:String)
-
[Удалить элемент], UnauthorizedAccessException
Попытка ДОСТУПА к папке с помощью Проводника
-
C:\ProgramData\Folder недоступна
Попытка УДАЛИТЬ папку с помощью Проводника
- Действие удаления запрашивает повышение прав.
- При повышении происходит сбой с этим сообщением.
Ваш комментарий будет первым