PowerShell:「mkdir」コマンドにfile alreadysが存在する場合、エラーを抑制するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/19853340

  •  29-07-2022
  •  | 
  •  

質問

検討:

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 コマンドへのパラメーター。

他のヒント

使用する:

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}

最初の実行(フォルダーオブジェクトの作成):5ミリ秒

2回目の実行(フォルダが存在した後):1ミリ秒

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"}}

最初の実行(フォルダーオブジェクトの作成):54ミリ秒

2回目の実行(フォルダが存在した後):15ミリ秒

私の投稿を掃除してくれてありがとうピーター!あなたは男です!

PowerShell 7( || うまくいかなかった):

(test-path foo) ? $null : (mkdir foo)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top