Работа с файлами и папками
Навигация по дискам 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
Копирование файлов и папок
Копирование выполняется с помощью командлета Copy-Item . Следующая команда создает резервную копию скрипта профиля PowerShell:
if (Test-Path -Path $PROFILE)
Команда Test-Path проверка, существует ли скрипт профиля.
Если целевой файл уже существует, то попытка копирования завершается неудачей. Чтобы перезаписать имеющийся целевой файл, используйте параметр Force.
if (Test-Path -Path $PROFILE)
Эта команда работает, даже если целевой объект доступен только для чтения.
Так же выполняется и копирование папок. Эта команда копирует папку 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.exe и robocopy.exe копировать файлы.
Создание файлов и папок
Создание новых элементов работает одинаково для всех поставщиков 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 файл, который уже существует, файл перезаписывается.
Удаление всех файлов и папок в папке
Удалить вложенные элементы можно с помощью командлета Remove-Item , однако он потребует подтверждения удаления, если элемент сам что-нибудь содержит. Например, если вы попытаелись удалить папку 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. Чтобы создать сопоставленный диск, видимый из проводник, используйте параметр «Сохранить«. Однако с сохранением можно использовать только удаленные пути.
Чтение текстового файла в массив
Одним из наиболее общих форматов хранения текстовых данных является файл, отдельные строки которого рассматриваются как отдельные элементы. Командлет Get-Content используется для чтения всего файла за один шаг, как показано далее:
Get-Content -Path $PROFILE # Load modules and change to the PowerShell-Docs repository folder Import-Module posh-git Set-Location C:\Git\PowerShell-Docs
Get-Content обрабатывает данные, считанные из файла как массив, с одним элементом на строку содержимого файла. Убедиться в этом можно, проверив свойство Length полученного содержимого:
PS> (Get-Content -Path $PROFILE).Length 3
Эта команда наиболее полезна для получения списков сведений в PowerShell. Например, можно сохранить список имен компьютеров или IP-адресов в файле C:\temp\domainMembers.txt с одним именем в каждой строке файла. Вы можете использовать командлет Get-Content , чтобы извлечь содержимое файла и поместить его в переменную $Computers :
$Computers = Get-Content -Path C:\temp\DomainMembers.txt
Теперь переменная $Computers представляет собой массив, содержащий в каждом элементе имя компьютера.
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Как создать файл в PowerShell — примеры использования New-Item
Командлет «New-Item» создаёт новый элемент и устанавливает его значение. Типы элементов, которые могут быть созданы, зависят от местоположения элемента. Например, в файловой системе «New-Item» создаёт файлы и папки, в реестре «New-Item» создаёт ключи и записи реестра.
«New-Item» также может устанавливать значение элементов, которые он создаёт. Например, когда он создаёт новый файл, «New-Item» может добавить начальный контент в файл.
Кроме файлов и ключей реестра, New-Item может создавать символические ссылки, подробнее об этом сказано в статье «Создание жёстких и мягких ссылок с помощью PowerShell».
Создание файла в текущей директории
Создание файла с именем testfile1.txt и строкой внутри «Это текстовая строка в файле.» в текущей директории:
New-Item -Path . -Name "testfile1.txt" -ItemType "file" -Value "Это текстовая строка в файле."
Создание нескольких файлов:
New-Item -ItemType "file" -Path "c:\ps-test\test.txt", "c:\ps-test\Logs\test.log"
Создание директории
Создание директории в корне диска c: с именем «logfiles»:
New-Item -Path "c:\" -Name "logfiles" -ItemType "directory"
Создание директории в другой директории (в папке «c:\ps-test\» будет создана подпапка «scripts»):
New-Item -ItemType "directory" -Path "c:\ps-test\scripts"
Создание профиля
New-Item -Path $profile -ItemType "file" -Force
Использование подстановочных символов для создания файлов в нескольких директориях
Проверяем содержимое папки:
Get-ChildItem -Path C:\Temp\
Directory: C:\Temp Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 5/15/2019 6:45 AM 1 One d----- 5/15/2019 6:45 AM 1 Two d----- 5/15/2019 6:45 AM 1 Three
Создаём новые файлы:
New-Item -Path * -Name temp.txt -ItemType File | Select-Object FullName
FullName -------- C:\Temp\One\temp.txt C:\Temp\Three\temp.txt C:\Temp\Two\temp.txt
Командлет Get-ChildItem показывает три папки в каталоге «C:\Temp». Используя подстановочные знаки, командлет New-Item создаёт файл` temp.txt` во всех каталогах текущего каталога. Командлет New-Item выводит созданные вами элементы, которые передаются в «Select-Object» для проверки путей вновь создаваемых файлов.
Создание символической ссылки на файл или папку
$link = New-Item -ItemType SymbolicLink -Path .\link -Target .\Notice.txt $link | Select-Object LinkType, Target
LinkType Target ——— —— SymbolicLink
В этом примере Target является псевдонимом для параметра Value. Цель символической ссылки может быть относительным путём. До PowerShell v6.2 цель должна быть полным путём.
Перезапись существующих папок
Использование параметра -Force в попытке пересоздать папки:
New-Item -Path .\TestFolder -ItemType Directory New-Item -Path .\TestFolder\TestFile.txt -ItemType File New-Item -Path .\TestFolder -ItemType Directory -Force
Directory: C:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 5/1/2020 8:03 AM TestFolder
Проверка содержимого папки:
Get-ChildItem .\TestFolder\
Directory: C:\TestFolder Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 5/1/2020 8:03 AM 0 TestFile.txt
Использование параметра -Force для перезаписи существующих файлов
New-Item ./TestFile.txt -ItemType File -Value 'This is just a test file'
Directory: C:\Source\Test Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 5/1/2020 8:32 AM 24 TestFile.txt
Команда для перезаписи:
New-Item ./TestFile.txt -ItemType File -Force
Directory: C:\Source\Test Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 5/1/2020 8:32 AM 0 TestFile.txt
Примечание: при использовании New-Item с ключом -Force для создания разделов реестра команда будет вести себя так же, как и при перезаписи файла. Если раздел реестра уже существует, ключ и все свойства и значения будут перезаписаны пустым разделом реестра.
Связанные статьи:
- Создание жёстких и мягких ссылок с помощью PowerShell (100%)
- Как включить удалённый рабочий стол RDP в Windows Server 2019 (55.6%)
- Как управлять службами в Windows (55.6%)
- Как в PowerShell узнать, какой процесс или программа блокируют файл (55.6%)
- Как переименовать файл или папку в PowerShell (55.6%)
- В GIMP функция «копирования» копирует только один слой (РЕШЕНО) (RANDOM — 50%)
Управление текущим расположением
При навигации по системам папок в проводнике у вас обычно есть определенное рабочее расположение, т. е. текущая открытая папка. Элементами в текущей папке можно легко управлять, щелкая их. Когда в интерфейсе командной строки (например, Cmd.exe) открыта папка, в которой находится определенный файл, вы можете получить к нему доступ, указав короткое имя, а не вводить весь путь к файлу. Текущий каталог называется рабочим.
PowerShell использует существительное расположение для ссылки на рабочий каталог и реализует семейство командлетов для изучения и управления расположением.
Получение текущего расположения (Get-Location)
Чтобы определить путь к текущему расположению каталога, введите Get-Location команду:
Get-Location
Path ---- C:\Documents and Settings\PowerUser
Командлет Get-Location аналогичен команде pwd в оболочке BASH. Командлет Set-Location аналогичен команде cd в Cmd.exe.
Настройка текущего расположения (задание расположения)
Команда Get-Location используется с командой Set-Location . Эта Set-Location команда позволяет указать текущее расположение каталога.
Set-Location -Path C:\Windows
После ввода команды обратите внимание, что вы не получаете прямых отзывов о влиянии команды. Большинство команд PowerShell, выполняющих действие, создают мало или нет выходных данных, так как выходные данные не всегда полезны. Чтобы убедиться, что при вводе Set-Location команды произошло успешное изменение каталога, включите параметр PassThru при вводе Set-Location команды:
Set-Location -Path C:\Windows -PassThru
Path ---- C:\WINDOWS
Параметр PassThru можно использовать со многими командами Set в PowerShell для возврата сведений о результатах в случаях, в которых выходные данные по умолчанию отсутствуют.
Вы можете указать пути относительно текущего расположения так же, как и в большинстве командных оболочек UNIX и Windows. В стандартной нотации для определения относительных путей точка ( . ) представляет текущую папку, а две точки ( .. ) — родительский каталог текущего расположения.
Например, если вы находитесь в папке C:\Windows , точка ( . ) представляет C:\Windows , а две точки ( .. ) представляют C: . Вы можете изменить текущее расположение на корень C: диска, введя следующее:
Set-Location -Path .. -PassThru
Path ---- C:\
Тот же метод работает на дисках PowerShell, которые не являются дисками файловой системы, например HKLM: . В реестре в качестве расположения можно задать раздел HKLM\Software , введя следующий код:
Set-Location -Path HKLM:\SOFTWARE -PassThru
Path ---- HKLM:\SOFTWARE
Затем можно изменить расположение каталога на родительский каталог, используя относительный путь:
Set-Location -Path .. -PassThru
Path ---- HKLM:\
Вы можете ввести Set-Location или использовать любой из встроенных псевдонимов PowerShell для Set-Location ( cd , chdir , sl ). Например:
cd -Path C:\Windows
chdir -Path .. -PassThru
sl -Path HKLM:\SOFTWARE -PassThru
Сохранение и отзыв последних расположений (Push-Location и Pop-Location)
При изменении расположений полезно следить за тем, где вы были и сможете вернуться в предыдущее расположение. Командлет Push-Location в PowerShell создает упорядоченную историю (стек) путей к каталогу, где вы были, и вы можете выполнить шаг назад в журнале путей к каталогу с помощью командлета Pop-Location .
Например, PowerShell обычно запускается в домашнем каталоге пользователя.
Get-Location Path ---- C:\Documents and Settings\PowerUser
Слово стек имеет специальное значение во многих параметрах программирования, включая .NET Framework. Например, в физическом стеке элементов последний элемент, помещенный в стек, является первым элементом, который можно извлечь из него. Добавление элемента в стек в разговорной речи называется «проталкиванием» элемента в стек. Извлечение элемента из стека в разговорной речи называется «выводом» элемента из стека.
Чтобы передать текущее расположение в стек, а затем переместить его в папку локальных параметров, введите:
Push-Location -Path "Local Settings"
После этого можно передать расположение локальных параметров в стек и переместить его в папку Temp, введя следующее:
Push-Location -Path Temp
Чтобы убедиться, что вы изменили каталоги, введите Get-Location команду:
Get-Location
Path ---- C:\Documents and Settings\PowerUser\Local Settings\Temp
Затем можно вернуться в последний посещаемый каталог, введя Pop-Location команду, и проверить изменение, введя Get-Location команду:
Pop-Location Get-Location
Path ---- C:\Documents and Settings\me\Local Settings
Как и в случае с командлетом Set-Location , вы можете включить параметр PassThru при вводе командлета Pop-Location , чтобы открыть указанный каталог:
Pop-Location -PassThru
Path ---- C:\Documents and Settings\PowerUser
Кроме того, можно использовать командлеты расположения с сетевыми путями. Если у вас есть сервер с именем FS01 с общим именем Public, вы можете изменить расположение, введя текст.
Set-Location \\FS01\Public
Push-Location \\FS01\Public
Вы можете использовать Push-Location команды и Set-Location команды, чтобы изменить расположение на любой доступный диск. Например, если у вас есть локальный диск CD-ROM с буквой D диска, содержащей компакт-диск данных, можно изменить расположение на компакт-диск, введя Set-Location D: команду.
Если диск пуст, вы получите следующее сообщение об ошибке:
Set-Location D:
Set-Location : Cannot find path 'D:\' because it does not exist.
При использовании интерфейса командной строки не удобно использовать проводник для проверки доступных физических дисков. Кроме того, проводник не отображаются все диски PowerShell. PowerShell предоставляет набор команд для управления дисками PowerShell.
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Как в Windows создать каталог начинающийся с точки?
![]()
Для работы некоторых сервисов, требуется создание жестко зарезервированного имени каталога (директории), это имя может включать в себя некоторые символы, например, символ точка «.». Один из частых примеров, требование создать каталог /.well-known/acme-challenge в корне веб сайта, для настройки автоматического выпуска сертификата Let’s Encrypt. Привычным способом создать такой каталог, используя графический интерфейс, не получится. При попытке создать такой каталог, через графический интерфейс Windows выдаст ошибку: «you must type a file name» («вы должны ввести имя файла»).
Чтобы обойти это ограничение, на именование каталогов в Windows, можно использовать как минимум 2 штатных способа:
1. создание каталога из командной строки.
Запустить командный строку cmd, перейти в нужный каталог, используя команду cd, и выполнить команду:
mkdir .dotdirectory
2. создание каталога используя PowerShell.
Запустить Powershell и выполнить команду ниже, при этом, указать полный путь для каталога:
New-Item c:\.dotdirectory -ItemType Directory
Как создать файл с точкой в начале?
Способ создания каталогов с точкой в начале имени, также подойдет и для создания файлов с подобным именованием.
New-Item c:\.dotdirectory\.dotfile -ItemType File