2013-06-26 4 views
46

Я пытаюсь создать папку с помощью PowerShell, если она не существует, так что я сделал:Создание папки, если она не существует - «Пункт уже существует»

$DOCDIR = [Environment]::GetFolderPath("MyDocuments") 
$TARGETDIR = "$DOCDIR\MatchedLog" 
if(!(Test-Path -Path MatchedLog)){ 
    New-Item -ItemType directory -Path $DOCDIR\MatchedLog 
} 

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

Я не уверен, что здесь не так

New-Item: пункт с указанным именем C: \ Users \ л \ Documents \ MatchedLog уже существует. В C: \ Users \ л \ Documents \ Powershell \ email.ps1: 4 гольцов: 13 + New-Item < < < < каталог -ItemType -Path $ DOCDIR \ MatchedLog + CategoryInfo: ResourceExists: (C: \ Users \ л .... Энты \ MatchedLog: String) [New-Item], IOException + FullyQualifiedErrorId: DirectoryExist, Microsoft.PowerShell.Commands.NewItemCommand`

+0

попробовать это: New-Item -ItemType Каталог -Force - Путь C: \ Path \ That \ May \ or \ May \ Not \ Exist –

ответ

79

Я даже не концентрируясь, вот как это сделать

$DOCDIR = [Environment]::GetFolderPath("MyDocuments") 
$TARGETDIR = '$DOCDIR\MatchedLog' 
if(!(Test-Path -Path $TARGETDIR)){ 
    New-Item -ItemType directory -Path $TARGETDIR 
} 
+9

Значение $ TARGETDIR должно быть в двойных кавычках, расширение строки отключено внутри синтаксиса, и вы получите недействительный патч h –

+2

Не будет ли существующий файл с тем же именем, что и папка, которую вы пытаетесь создать, с помощью Test-Path -Path $ TARGETDIR? (Думая о добавлении контейнера -pathType) – ftexperts

37

С помощью New-Item вы можете добавить параметр Force

New-Item -Force -ItemType directory -Path foo 

Или ErrorAction параметр

New-Item -ErrorAction Ignore -ItemType directory -Path foo 
+1

JFI «-ErrorAction Ignore» не поддерживается в PowerShell 2 – KindDragon

+0

Ответ на другой вопрос. –

+0

Чтобы создать элемент без распечатки консоли: Каталог New-Item -Force -ItemType -Path D: \ yourpath \ 1 | Из-Null – George

4

Альтернативный синтаксис с использованием оператора -Not и в зависимости от ваших предпочтений для читаемости:

if(-Not (Test-Path -Path $TARGETDIR)) 
{ 
    New-Item -ItemType directory -Path $TARGETDIR 
}