programing

PowerShell: "mkdir" 명령에 대한 파일이 이미 존재하는 경우 오류를 억제하려면 어떻게 해야 합니까?

topblog 2023. 9. 20. 20:01
반응형

PowerShell: "mkdir" 명령에 대한 파일이 이미 존재하는 경우 오류를 억제하려면 어떻게 해야 합니까?

고려 사항:

PS Y:\> mkdir  C:/dog


    Directory: C:\


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         11/7/2013  10:59 PM            dog


PS Y:\> mkdir  C:/dog
New-Item : Item with specified name C:\dog already exists.
At line:38 char:24
+         $scriptCmd = {& <<<<  $wrappedCmd -Type Directory @PSBoundParameters }
    + CategoryInfo          : ResourceExists: (C:\dog:String) [New-Item], IOException
    + FullyQualifiedErrorId : DirectoryExist,Microsoft.PowerShell.Commands.NewItemCommand

추가.-Force명령에 대한 parameter.

용도:

mkdir C:\dog -ErrorAction SilentlyContinue

올바른 이유가 없는 한 오류 메시지를 억제하지 않는 것이 좋습니다.디렉토리를 만들기만 시도하는 것이 아니라 디렉토리가 존재하는지 확인합니다.그렇다면 내용물을 삭제하거나 다른 이름을 골라야 하는 것은 아닐까요?그래서.

if (-not (test-path "c:\foobar") ) {
    write-host "c:\foobar doesn't exist, creating it"
    md 'c:\foobar'|out-null
} else {
    write-host "c:\foobar exists, no need to create it"
}

오류를 억제하는 것은 일반적으로 당신이 말하는 것처럼 최선의 방법이 아니지만, 명령어는-Force이전에 존재하는지 확인하는 것보다 훨씬 빨리 실행됩니다.

여기서 D:\는 RAM 디스크입니다.

Measure-Command {new-item "D:\NewFolder\NewSubFolder" -ItemType Directory -force}

첫 번째 실행(폴더 개체 생성): 5ms

두 번째 실행(폴더가 존재한 후): 1ms

Measure-Command {if (-not (test-path "D:\NewFolder\NewSubFolder") ) {
write-host "Directory doesnt exist, creating it"
md "D:\NewFolder\NewSubFolde"|out-null} else {
write-host "Directory exists, no need to create it"}}

첫 번째 실행(폴더 개체 생성): 54ms

두 번째 실행(폴더가 존재한 후): 15ms

내 게시물을 치워줘서 고마워요 피터!당신이 바로 그 사람입니다!

파워셸 7(||작동하지 않음):

(test-path foo) ? $null : (mkdir foo)

그냥 사용하시면 됩니다.if:

if (-not (test-path C:/dog)) { mkdir -p C:/dog }

-p경로에 존재하지 않는 모든 디렉터리를 만듭니다.

이것의 단점은 길의 이름을 두번 지어야 한다는 것입니다.

언급URL : https://stackoverflow.com/questions/19853340/powershell-how-can-i-suppress-the-error-if-file-alreadys-exists-for-mkdir-com

반응형