PowerShell 1.0 - تفشل ملفات إعادة تسمية عندما يكون البرنامج النصي في دليل مختلف
-
28-09-2019 - |
سؤال
أحاول إعادة تسمية ملفات السجل القديمة ، لكن البرنامج النصي لا يعمل إلا عندما يتم تخزين البرنامج النصي في نفس المجلد مثل ملفات السجل. هنا هو الرمز:
cls
$file = gci E:\logs |? {$_.extension -eq ".log" |% {rename-item $_ ($_.Name + ".old")}
عندما أقوم بتشغيل هذا البرنامج النصي من E:\logs
, ، إنه يعمل بشكل جيد. ومع ذلك ، عندما أقوم بتشغيل هذا البرنامج النصي من C: Scripts ، فإنه يعطيني هذا الخطأ:
Rename-Item: Cannot rename because item at 'my.log.file.log' does not exist.
At C:\Scripts\rename-script.ps1:2 char:92
+ $file = gci E:\logs |? {$_.extension -eq ".log" |% {rename-item $_ ($_.Name + ".old")}
+ CategoryInfo : InvalidOperation (:) [Rename-Item], FSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand
لقد حاولت أيضًا استخدام Move-Item
أمر مع -literalpath
التبديل ولكن كان له نفس النتيجة
المحلول
تمنحك خاصية الاسم اسم الملف فقط بدون المسار. ربما تريد استخدام خاصية FullName بدلاً من ذلك. يمكنك أيضًا تبسيط هذا نظرًا لأن إعادة تسمية ITEM تقبل إدخال خط الأنابيب لاسم الملف المصدر:
gci E:\logs *.log | rename-item -newname {$_.FullName + ".old"}
لاحظ أيضًا أن GCI (get-childitem) يسمح لك بتصفية العناصر التي يخرجها باستخدام -Filter
بارموتر. هذه المعلمة هي معلمة موضعية (2) حتى لا تضطر حتى لتحديد اسم المعلمة.
نصائح أخرى
يبدو أنه لا يجد ذلك لأنه ليس في مسار DOS.
Viperjay