2012-05-18 11 views
7

मैं एकाधिक कंप्यूटरों पर बैच फ़ाइल में कमांड चलाने के लिए चाहता हूं।मुझे txt फ़ाइल से इनपुट स्वीकार करने के लिए बैच फ़ाइल कैसे प्राप्त करें?

उदाहरण के लिए:

@echo off 
ping %1 
pause 
exit 

यदि यह बैच फ़ाइल pingme.bat कहा जाता था और मैं pingme.bat yahoo.com टाइप तो यह yahoo.com को पिंग करेंगे। मेरी समस्या यह है कि मैं बैच फ़ाइल को टेक्स्ट फ़ाइल से इनपुट स्वीकार करना चाहता हूं।

pingme.bat computers.txt की तरह और यह फ़ाइल में सूचीबद्ध कंप्यूटरों के नाम पढ़ेगा और जो भी आदेश मैं उन्हें निर्दिष्ट करने के लिए निर्दिष्ट करता हूं।

%1 बैच फ़ाइल टाइप करते समय निर्दिष्ट इनपुट को स्वीकार करता है, अब मैं बैच फ़ाइल को txt में पंक्तियों को पढ़ने और इसे करने के लिए बैच फ़ाइल करना चाहता हूं।

टेक्स्ट में पंक्तियां सूची रूप में हैं जो अल्पविराम या कुछ भी नहीं उपयोग कर रही हैं।

उत्तर

9

एक तरह से ऐसा करने के लिए तो जैसे एक पाठ फ़ाइल के किसी URL जगह होगा:

www.google.com
www.yahoo.com

उसके बाद निम्न बैच चलाने

for /f %%a in (%1) do (
echo Pinging %%a... 
ping %%a 
) 

और URLs.txt

वैकल्पिक रूप से pingme.bat के रूप में cmd ​​से चलाने के लिए, आप बैच के भीतर पाठ फ़ाइल का नाम निर्दिष्ट कर सकता है, और पैरामीटर

for /f %%a in (URLs.txt) do (
echo Pinging %%a... 
ping %%a 
) 

यहाँ एक और दृष्टिकोण

इस विशेष बैच सूची से प्राप्त कर लेगा, और output.txt को लिखने अगर पिंग

@ECHO OFF 
SET output=output.txt 
IF EXIST "%output%" DEL "%output%" 
FOR /f %%a IN (URLs.txt) DO (
    CALL :ping %%a 

) 
GOTO :EOF 

:ping 
ping -n 1 %1 | find "Approximate round trip" >NUL || ECHO %1>>"%output%" 

उम्मीद है कि सफल रहा था है के बिना चला जो आपको सही दिशा में सेट करता है।

FOR /F "tokens=*" %%L IN (%1) DO (
    ping %%L 
    pause 
) 

और पैरामीटर pingme.bat computers.txt के रूप में पाठ फ़ाइल से कॉल करने की: -

+2

क्यों पहला लूप के अंदर सेटलोकल/एंडलोकल? दूसरी लूप में एक सबराउटिन क्यों कॉल करें? दोनों मामलों में आप किसी भी कारण से चीजों को धीमा कर रहे हैं जो मैं देख सकता हूं। – dbenham

+0

@ डेबेनहम अच्छा बिंदु। एसओ पोस्ट के लिए स्क्रिप्ट को संशोधित करने के बाद से वहां छोड़ा गया था। Subroutine बस संगठन के लिए है। धन्यवाद। –

1

आप एक FOR पाश का उपयोग कर सकते pingme.bat के रूप में सहेजना।

0

पाठ फ़ाइल में एक से अधिक यूआरएल के आईपी पते को खोजने के लिए और पाठ फ़ाइल में उत्पादन प्राप्त करने के लिए:

FOR /F "tokens=*" %%L IN (%1) DO (
    nslookup %%L >> output.txt 
    pause 
) 

सहेजें "ping.bat" के रूप में स्क्रिप्ट और कमांड प्रॉम्प्ट से ping.bat URL.txt कहते हैं।

संबंधित मुद्दे