PowerShell: كيف يمكنني قمع الخطأ إذا كان ملف alreadys موجودًا لأمر "MKDIR"؟

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: هو قرص ذاكرة الوصول العشوائي:

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

التشغيل الأول (إنشاء كائن المجلد): 5 مللي ثانية

الجولة الثانية (بعد مجلد موجود): 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 مللي ثانية

الجولة الثانية (بعد مجلد موجود): 15 مللي ثانية

شكرا لك بيتر لتنظيف رسالتي! أنت رجل!

PowerShell 7 ( || لم يعمل):

(test-path foo) ? $null : (mkdir foo)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top