أضف ال -Force
المعلمة إلى الأمر.
PowerShell: كيف يمكنني قمع الخطأ إذا كان ملف alreadys موجودًا لأمر "MKDIR"؟
-
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
المحلول
نصائح أخرى
يستخدم:
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)
لا تنتمي إلى StackOverflow