إعادة توجيه الإخراج إلى وسيطة سطر الأوامر من أمر آخر في ويندوز

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

  •  07-07-2019
  •  | 
  •  

سؤال

وكيف يمكنني، في نظام التشغيل Windows، استخدم إخراج البرنامج النصي الأمر / كحجة لسيناريو آخر؟ (A الأنابيب | لن تعمل هنا، لأن هذا السيناريو الآخر لا يقرأ من الإدخال القياسي)

وتوضيح جدا: لدي AnotherScript الذي يحتاج إلى وسيطة حجة، منها مثلا:

AnotherScript 12

والآن أريد أن حجة (12 في المثال) أن يأتي من إخراج السيناريو، الذي يطلق عليه ScriptB. لذلك أود شيء على غرار

AnotherScript (ScriptB)

ووAnotherScript هو في الواقع النصي الثعبان الذي يتطلب حجة، وScriptB هو السيناريو سيغوين باش التي تنتج بعض العدد، وبالتالي فإن الطريقة أود أن استخدامها هو شيء من هذا القبيل:

c:\Python26\python.exe AnotherScript (c:\cygwin|bin|bash --login -i ./ScriptB)

وشكرا على الأجوبة. ومع ذلك، وبالنظر إلى شاقة 'ل' بناء المطلوبة، لقد إعادة كتابة AnotherScript القراءة من الإدخال القياسي. الذي يبدو وكأنه حل أفضل.

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

المحلول

ملحوظة: كل هذا يتطلب الأوامر ليكون في ملف دفعي. وبالتالي علامات على % مزدوجة.

يمكنك استخدام الأمر for لالتقاط إخراج الأمر:

for /f "usebackq delims=" %%x in (`ScriptB`) do set args=%%x

وبعد ذلك يمكنك استخدام هذا الناتج في أمر آخر:

AnotherScript %args%

وهذا سوف يسبب %args% لاحتواء السطر الأخير من إخراج ScriptB، على الرغم من. اذا عاد خط واحد فقط يمكنك لفة هذا في سطر واحد:

for /f "usebackq delims=" %%x in (`ScriptB`) do AnotherScript %%x

عند استخدامها خارج ملف دفعي لديك لاستخدام %x بدلا من %%x.

ومع ذلك، إذا ScriptB يعود أكثر من سطر واحد، ويدير AnotherScript لكل من هذه الخطوط. يمكنك الالتفاف على هذا، على الرغم فقط ضمن دفعة الملفات عن طريق كسر بعد أول حلقة التكرار:

for /f "usebackq delims=" %%x in (`ScriptB`) do AnotherScript %%x & goto :eof

نصائح أخرى

هل يمكن حفظ الإخراج من السيناريو الأول إلى متغير البيئة واستخدام محتواه كمعلمة سطر الأوامر إلى البرنامج النصي الثاني، إذا كان هذا هو ما تريد.

وشيء من هذا القبيل:

for /f "delims=" %a in ('first_script.cmd') do @set ouput=%a
second_script %ouput%

وحفظ البيانات في ملف مؤقت؟

وأو استخدام أنابيب اسمه بدلا من الأنابيب على مستوى في والإخراج.

وأو استدعاء السيناريو الآخر من أول واحد ونقل البيانات عبر الوسيطات الأمر

ولا يمكنك جعل الأمور بطريقة أكثر تعقيدا مما هو ضروري؟

واتصل سيناريو آخر من باش. إذا لزم الأمر، تثبيت سيغوين فقط حتى تتمكن من القيام بذلك.

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