考えてみましょう:
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
エラーを抑制することは、あなたが言うように通常はベストプラクティスではありませんが、コマンド-Force
は、以前に存在するかどうかを確認するよりもはるかに高速に実行されます。
ここで、D:\はRAM disk:
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ミリ秒
ピーター、私の投稿をクリーンアップしてくれてありがとう!あなたは男です!
エラーメッセージを抑制しないことをお勧めします(正当な理由がない限り)。ディレクトリを作成するだけでなく、ディレクトリが存在するかどうかを確認してください。もしそうなら、多分あなたはその内容を削除するか、別の名前を選ぶ必要がありますか?そのようです、
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"
}