2013-06-26 41 views
46

tôi đang cố gắng để tạo ra một thư mục sử dụng PowerShell nếu nó không tồn tại vì vậy tôi đã làm:Tạo một thư mục nếu nó không tồn tại - "Item đã tồn tại"

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

này đem lại cho tôi lỗi rằng thư mục đã tồn tại, nhưng nó không nên cố gắng tạo ra nó.

Tôi không chắc chắn những gì sai ở đây

New-Item: mục với định tên C: \ Users \ l \ Documents \ MatchedLog đã tồn tại. Tại C: \ Users \ l \ Documents \ Powershell \ email.ps1: 4 char: 13 + New-Item < < < < -ItemType thư mục -Path $ DOCDIR \ MatchedLog + CategoryInfo: ResourceExists: (C: \ Users \ l .... ents \ MatchedLog: string) [New-mục], IOException + FullyQualifiedErrorId: DirectoryExist, Microsoft.PowerShell.Commands.NewItemCommand`

+0

thử điều này: New-mục -ItemType mục -force - Đường dẫn C: \ Đường dẫn \ That \ May \ Hoặc \ Có thể \ Không \ Hiện tại –

Trả lời

79

tôi thậm chí còn không tập trung, đây là cách để làm điều đó

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

Giá trị của $ TARGETDIR phải ở trong dấu ngoặc kép, mở rộng chuỗi bị vô hiệu hóa bên trong đơn và bạn sẽ kết thúc bằng việc dán không hợp lệ h –

+2

Sẽ không có tệp hiện có cùng tên với thư mục bạn đang cố gắng tạo đối sánh Đường dẫn thử nghiệm -Path $ TARGETDIR? (Suy nghĩ thêm "container -pathType") – ftexperts

37

Với mục mới bạn có thể thêm tham số Force

New-Item -Force -ItemType directory -Path foo 

Hoặc ErrorAction tham số

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

JFI "-ErrorAction Ignore" không được hỗ trợ trong PowerShell 2 – KindDragon

+0

Câu trả lời cho một câu hỏi khác. –

+0

Để tạo mục không có bảng điều khiển in: Thư mục New-Item -Force -ItemType -Path D: \ yourpath \ 1 | Out-Null – George

4

cú pháp thay thế sử dụng toán tử -Not và tùy thuộc vào sở thích của bạn để có thể đọc:

if(-Not (Test-Path -Path $TARGETDIR)) 
{ 
    New-Item -ItemType directory -Path $TARGETDIR 
} 
Các vấn đề liên quan