سؤال

أنا أعمل على بناء نظام.بناء نظام الوظائف النتائج كملف مضغوط في الدليل.للأسف ليس لدي أي طريقة سهلة لمعرفة اسم الملف zip, لأنها وقتية.التالي من العملية ، يجب فك ضغط هذا الملف المضغوط إلى بعض موقع معين ومن ثم القيام ببعض أكثر عمليات الملف.

أعتقد أن تغيير نظام البناء لذا تحديد اسم النتيجة ملف مضغوط من سطر الأوامر ، ومع ذلك ، على الرغم من أنه قد يكون أسهل فقط لمعرفة أي واحد هو أحدث الملف و فك الضغط (إذا العملية السابقة ناجحة).

كيف يمكنني إصدار بفك الأمر الذي لن تؤثر إلا على أحدث ملف مضغوط في الدليل ، وتجاهل الآخرين ؟

تحرير:قررت استخدام قدرات النمل على هذه المهمة بدلا من ذلك.بيد أنه لا يزال خدعة متقنة قد تصل sleve...شكرا على الجواب!

هل كانت مفيدة؟

المحلول

هذا ينبغي أن نفعل ذلك:

FOR /F usebackq %%i IN (`DIR /B /O-D *.ZIP`) DO UNZIP %%i && GOTO DONE || GOTO DONE
:DONE

يعمل هذا على النحو التالي:

  • DIR /B /O-D *.ZIP يسرد كافة الملفات المضغوطة في عكس تاريخ النظام في "العارية" - أيالاسم فقط الشكل.
  • FOR /F usebackq يتم استخدام حلقة على إخراج الأمر.
  • && GOTO DONE || GOTO DONE يتأكد UNZIP فقط تشغيل الملف الأول.تحتاج كل && (و) ، || (أو) في حالة بفك فشل لسبب ما.

سوف تحتاج إلى تغيير UNZIP %%i لأي بفك الأوامر التي تريد استخدامها.

تحرير أعلاه سوف تعمل طالما الرمز البريدي اسم الملف لا يحتوي على أية مسافات.إذا كنت ترغب في التعامل مع أسماء الملفات التي تحتوي على مسافات استخدام البديل التالية:

FOR /F "tokens=*" %%i IN ('DIR /B /O-D *.ZIP') DO UNZIP "%%i" && GOTO DONE || GOTO DONE
:DONE

الاختلافات هي:

  • "الرموز=*" الخيار يعود كل من اسم حتى لو كان يحتوي على مسافات.

  • اسم الملف مرت بفك ونقلت

  • هذا الخيار يستخدم واحدة نقلت عن الأمر DIR لذلك لا حاجة إلى "usebackq" الخيار.

نصائح أخرى

إذا سيغوين أو غيرها يونكس مثل البيئة هو بديل

unzip "$(ls -tr *zip | tail -n1)"

وسوف نفعل ذلك

وأعتقد أنك في حاجة 7 الرمز البريدي لتكون قادرة على السيناريو ضغط / فك الضغط.

لماذا استخدام ملفات الخفافيش عندما يكون لديك بوويرشيل أو وحدة التحكم الطلبات؟

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