如果文件夹不存在,则创建该文件夹 - "项目已存在"

lai*_*ha0 69 powershell

我试图使用PowerShell创建一个文件夹,如果它不存在所以我做了:

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

这给了我文件夹已经存在的错误,但它不应该尝试创建它.

我不确定这里有什么问题

New-Item:具有指定名称C:\ Users\l\Documents\MatchedLog的项目已存在.在C:\ Users\l\Documents\Powershell\email.ps1:4 char:13 + New-Item <<<< -ItemType directory -Path $ DOCDIR\MatchedLog + CategoryInfo:ResourceExists:(C:\ Users\l. ... ents\MatchedLog:String)[New-Item],IOException + FullyQualifiedErrorId:DirectoryExist,Microsoft.PowerShell.Commands.NewItemCommand`

lai*_*ha0 114

我甚至没有集中注意力,这里是如何做到的

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

  • $ TARGETDIR的值应该是双引号,在单个内部禁用字符串扩展,你最终会得到无效的路径 (13认同)
  • 与您尝试创建的文件夹同名的现有文件不会与Test-Path -Path $ TARGETDIR匹配吗?(考虑添加"-pathType容器") (5认同)

小智 51

使用New-Item,您可以添加Force参数

New-Item -Force -ItemType directory -Path foo
Run Code Online (Sandbox Code Playgroud)

或者ErrorAction参数

New-Item -ErrorAction Ignore -ItemType directory -Path foo
Run Code Online (Sandbox Code Playgroud)

  • 一个不同问题的答案。 (2认同)

Wil*_*ich 16

使用-Not运算符的替代语法,并根据您的可读性偏好:

if( -Not (Test-Path -Path $TARGETDIR ) )
{
    New-Item -ItemType directory -Path $TARGETDIR
}
Run Code Online (Sandbox Code Playgroud)