PowerShell 1.0 - تفشل ملفات إعادة تسمية عندما يكون البرنامج النصي في دليل مختلف

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

سؤال

أحاول إعادة تسمية ملفات السجل القديمة ، لكن البرنامج النصي لا يعمل إلا عندما يتم تخزين البرنامج النصي في نفس المجلد مثل ملفات السجل. هنا هو الرمز:

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top