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

Создайте папку, если она не существует, с помощью PowerShell


Перед тем как создать папку, важно проверить, существует ли она уже. Особенно, когда вы создаете скрипты, которые будут запускаться автоматически. Если вы не проверите, существует ли директория или нет, ваш скрипт может столкнуться с ошибкой.

В этой статье я покажу вам, как создать новую папку только в том случае, если она не существует.

Создайте папку, если она не существует

Перед тем как создать папку, мы сначала проверим, существует ли она или нет. Для этого мы используем командлет Test-Path, который вернет True или False в зависимости от результата. Если результат ложный, то мы знаем, что каталог не существует, и можем перейти к его созданию.

Set the folder path
$path = "c:\temp\newfolder\structure\"

Check if folder not exists, and create it
if (-not(Test-Path $path -PathType Container)) {
    New-Item -path $path -ItemType Directory
}

Важно отметить, что командлет New-Item может и будет создавать полную структуру папок. Таким образом, в приведенном выше примере только папка c:\temp существовала. Однако подпапка newfolder и конечная папка structure не существовали. Тем не менее, обе папки создаются автоматически с помощью командлета New-Item.

Мы также используем оператор -Not, который можно сократить, используя вместо него !, потому что в этом случае мы хотим только проверить, существует ли каталог.

Параметр -PathType Container гарантирует, что мы проверяем только существующие каталоги. Для команды New-Item мы используем параметр -ItemType Directory, чтобы убедиться, что создается папка, а не файл.

Использование обработки ошибок

С помощью проверки Test-Path мы уже поймали большинство проблем, но команда New-Item все равно может завершиться неудачей при создании папки. Например, у вас могут не быть прав на запись в родительской папке, что не позволит вам фактически создать папку.

Таким образом, лучший способ создать новую папку, если она еще не существует, - это также использовать блок Try-Catch. Это позволяет вам ловить любые ошибки и обрабатывать их должным образом:

Set the folder path
$path = "c:\temp\newfolder\structure\"

Check if folder not exists, and create it
if (-not(Test-Path $path -PathType Container)) {
    try {
        New-Item -path $path -ItemType Directory -ErrorAction stop 
    }
    catch {
        Write-Host "Unable to create Folder" -ForegroundColor Red
        Write-Host $_.Exception.Message -ForegroundColor Red
    }
}

Используя только New-Item

Также возможно создать новую папку, если она не существует, используя только команду New-Item. Мы можем использовать опцию -Force, которая подавит любые ошибки, если директория уже существует. Она также вернет объект папки, так же как это делает команда при фактическом создании папки.

Если папка уже существует, то любое содержимое в папке (или подкаталогах) останется. Таким образом, вы не потеряете никаких данных с помощью этого метода. Единственное преимущество этого метода в том, что он короче, и вы можете использовать одну команду для создания и получения объекта папки, независимо от того, существует он или нет.

Set the folder path
$path = "c:\temp\newfolder\structure\"

Create a folder whether is exists or not
New-Item -path $path -ItemType Directory -Force

По умолчанию командлет New-Item возвращает объект папки, который он создал. Если вы не сохраните это в переменной, он будет выведен в консоль. Вы можете подавить это, добавив Out-Null после командлета.

New-Item -path $path -ItemType Directory -Force | Out-Null

Заключение

При написании скриптов лучше всего быть ясным в своих действиях. Поэтому я рекомендую сначала использовать Test-Path, а создавать папку с правильной обработкой ошибок только в том случае, если она не существует.

Надеюсь, вам понравилась эта статья. Если у вас есть какие-либо вопросы, просто оставьте комментарий ниже.