Директории в PowerShell

Содержание
Введение
Test-Path: проверить существование
New-Item: Создать директорию
Remove-Item: Удалить директорию
Копировать директорию
Expand-Archive: распаковать архив
Rename-Item: переименовать директорию
$PSScriptRoot: текущая директория
Родительская директория
Join-Path объединение путей
Похожие статьи

Проверить существование директории

$script_name = имя вашего скрипта $workdir = ваша рабочая директория $path = Join-Path $workdir $script_name if (Test-Path -Path $path) { Write-Output "$path exists" } else { Write-Output "$path does not exist" }

Проверить есть ли в текущей директории поддиректория swagger-ui

${SwaggerPath} = Join-Path ${pwd} "swagger-ui"; If (Test-Path -path ${SwaggerPath}) { Write-Host "swagger-ui dir exists" -f Green } Else { Write-Host "swagger-ui dir does not exist" -f Yellow }

Проверить и если такой директории нет - скачать архив

$SWAGGER_URL = "https://github.com/swagger-api/swagger-ui/archive/refs/tags/v5.11.10.zip"; ${SwaggerPath} = Join-Path ${pwd} "swagger-ui"; If (Test-Path -path ${SwaggerPath}) { Write-Host "swagger-ui dir exists" -f Green } Else { Write-Host "swagger-ui dir does not exist - starting download" -f Yellow Invoke-WebRequest $SWAGGER_URL -OutFile swagger-ui.zip }

Создать директорию

Для создания новой директории используется команда New-Item с ItemType directory

New-Item -Path "c:\" -Name "logfiles" -ItemType "directory"

Проверить наличие директории. Если её нет - создать.

If (Test-Path -path "test\mod\etc\") { Write-Host "test\mod\etc\ dir exists" -f Green } Else { Write-Host "test\mod\etc\ dir does not exist - creating" -f Yellow New-Item -Path "test\mod\" -Name "etc" -ItemType "directory" }

Пример в виде функции

function create_folder() { param ( [string] $parent_path, [string] $folder_name ) $time = (Get-Date -Format "yyyy-MM-dd HH:mm:ss") Write-Host ($time + " create_folder() ${path}") -f Magenta $path = Join-Path $parent_path $folder_name If (Test-Path -path $path) { Write-Host ($time + " ${path} dir already exists") -f Magenta } Else { Write-Host ($time + " ${path} dir does't exist creating") -f Magenta New-Item -Path $path -Name $folder_name -ItemType "directory" } } create_folder "S:\" "Shared"

.\create_folder.ps1

2026-02-09 02:27:01 create_folder() 2026-02-09 02:27:01 S:\Shared dir does't exist creating Directory: S:\Shared Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 09/02/2026 2:27 AM Shared

.\create_folder.ps1

2026-02-09 02:27:06 create_folder() 2026-02-09 02:27:06 S:\Shared dir already exists

Удалить директорию

Удалить директорию можно с помощью той же команды, которая удаляет файлы Remove-Item. Нужно передать аргументы -LiteralPath, -Force и -Recurse.

Пример удаления директории dirname из её родительской директории.

Remove-Item -LiteralPath "dirname" -Force -Recurse

Копировать директорию

Копировать директорию можно с помощью той же команды, которая копирует файлы Copy-Item. Нужно передать аргументы -Path и -Recurse. Для перезаписи существующих файлов нужно добавить -Force

Пример копирования директории "C:\SourceFolder" в директорию "D:\TargetFolder".

Copy-Item -Path "C:\SourceFolder" -Destination "D:\TargetFolder" -Recurse -Force

Распаковать архив

Распаковать архив в текущую директорию

Expand-Archive -Path swagger-ui.zip -DestinationPath .

Переименовать директорию

Rename-Item -Path swagger-ui-5.11.10 -NewName swagger-ui

$PSScriptRoot

Получить путь до директории, в которой находится исполняемый скрипт

Write-Output $PSScriptRoot

Импортировать другой скрипт указав путь относительно текущего скрипта

. "$PSScriptRoot\settings.ps1"

В PowerShell 2.0 $PSScriptRoot не сработает, поэтому нужно использовать следующую альтернативу с применением Split-Path и Join-Path

$scriptPath = Split-Path -Parent $MyInvocation.MyCommand.Path $settingsPath = Join-Path $scriptPath "..\..\_settings.ps1" . $settingsPath

Родительская директория

Получить путь до родительской директории в современных версиях PowerShell

$parent = Split-Path -Parent $PSScriptRoot

В PowerShell 2.0 $PSScriptRoot не сработает, поэтому нужно использовать следующую альтернативу с применением Split-Path

$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path $parentDir = Split-Path -Parent $scriptDir # Если нужно импортировать скрипт из родительской директории: $importPath = Join-Path $parentDir "YourScript.ps1" . $importPath

Join-Path

Объединить пути можно следующим образом

$TMP_PATH = "C:/tmp_python" $TMP_PYTHON_EXE = Join-Path -Path $TMP_PATH -ChildPath "python.exe"

Пример импорта скрипта относительно текущего с применением Join-Path в PowerShell 2.0.

$scriptPath = Split-Path -Parent $MyInvocation.MyCommand.Path $settingsPath = Join-Path $scriptPath "..\..\_settings.ps1" . $settingsPath

Автор статьи: Андрей Олегович

Похожие статьи
PowerShell
Alias
Основы
Запросы к REST API
Пользователи
Сеть
Установка
Файлы
Функции
Циклы
Ошибки PowerShell

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: