2012-12-13 34 views
7

का उपयोग कर टेक्स्ट फ़ाइल में स्थानीय आईपी पता लिखें, मैं एक बैच फ़ाइल बनाना चाहता हूं जो एक txt फ़ाइल पर स्थानीय आईपी पता लिखता है। जब मैं इस कोड के साथ एक बैच फ़ाइल को चलाने (फ़ाइल पथ गलत है लेकिन यह है कि समस्या नहीं है):बैच फ़ाइल

ipconfig | find "IP Address" > \File.txt 

मैं पूरी खिड़कियों आईपी विन्यास मिल (मैं xxx के साथ कुछ नंबर और सामान बदल सभी जानकारी नहीं दिखाने के लिए)

IP Address. . . . . . . . . . . . : 100.100.100.223 

    IP Address. . . . . . . . . . . . : 192.xxx.xxx.xxx 

मैं केवल 100.100.100.223 फ़ाइल में लिखना चाहता हूं।

मैं बैच फ़ाइलों के लिए नया हूं और मैंने वास्तव में बहुत कुछ खोजा है और मैं वास्तव में उलझन में हूं। (शायद मैं गलत कीवर्ड खोज रहा हूं)।

यह बताना भूल गया कि मैं विंडोज एक्सपी का उपयोग कर रहा हूं (क्योंकि कुछ उत्तर XP पर काम नहीं करते हैं)।

उत्तर

6

SET /P आदेश का उपयोग कर एक चर में सिर्फ लिखित फ़ाइल की पहली पंक्ति पढ़ें, फिर ECHO का उपयोग कर कि लाइन के साथ फ़ाइल को अधिलेखित:

ipconfig | find "IP Address" > \File.txt 
< \File.txt SET /P first_ip= ECHO %first_ip%> \File.txt 

(टिप्पणियों के जवाब में) अद्यतन:

बस आईपी पते को निकालने के लिए, आपको इस तरह की एक FOR /F पाश इस्तेमाल कर सकते हैं:

ipconfig | find "IP Address" > \File.txt 
< \File.txt SET /P first_ip= 
FOR /F "delims=: tokens=2" %%I IN ("%first_ip%") DO ( ECHO %%I> \File.txt ) 

एक FOR /F पाश आप पाठ (एक फ़ाइल या एक स्ट्रिंग शाब्दिक) लाइन द्वारा लाइन पर कार्रवाई करने के लिए अनुमति देता है, खेतों में प्रत्येक पंक्ति बंटवारे (या टोकन) निर्दिष्ट डिलीमीटर (ओं) के आधार पर। आप अंतर्निहित सहायता (FOR /?) में इस आदेश के बारे में अधिक पढ़ सकते हैं। मैं केवल यह जोड़ूंगा कि इस मामले में संसाधित टुकड़ा एक स्ट्रिंग शाब्दिक (first_ip का मान) है, तो डिलीमीटर : पर सेट किया गया है, और लूप वैरिएबल (%%I) 2 nd टोकन प्राप्त करता है, जो एक आईपी पता है ।

ध्यान दें कि : और आईपी के बीच की जगह संरक्षित है, यानी यह टोकन ( 100.100.100.223) का हिस्सा बन जाता है और इसलिए, फ़ाइल को भी लिखा जाता है। आप इसके बारे में बहुत खुश नहीं हैं, तो आप अंतरिक्ष से छुटकारा पाने के, इस तरह की एक सबरूटीन इस्तेमाल कर सकते हैं:

ipconfig | find "IP Address" > \File.txt 
< \File.txt SET /P first_ip= 
FOR /F "delims=: tokens=2" %%I IN ("%first_ip%") DO (
    CALL :MyEcho %%I 
) 
:: the following command is there merely to 
:: avoid running (into) the subroutine again 
GOTO :EOF :MyEcho ECHO %1> \File.txt 

जब सबरूटीन कहा जाता है (CALL :MyEcho %%I), तर्क प्रमुख अंतरिक्ष के साथ पारित हो जाता है । लेकिन जब subroutine की कमांड लाइन को संसाधित करते हैं, तो उस स्थान को अब मूल्य के हिस्से के रूप में नहीं देखा जाता है, क्योंकि तर्क उद्धृत नहीं किया जाता है और इसलिए पार्सर केवल दो रिक्त स्थान वाले नाम से अलग तर्क को देखता है। इस प्रकार subroutine में %1पते के बिना अग्रणी स्थान का मूल्यांकन करता है।

+0

बहुत बहुत धन्यवाद !!! मैं वही मिला जो मैं चाहता था! – Kondax

+0

एक और बात यह है कि, मैं "आईपी पता ... ...। 100.100.100.223" , क्या मैं इसे किसी भी तरह से "100.100.100.223" – Kondax

+1

पर अपडेट कर सकता हूं कृपया मेरा अपडेट देखें । –

0

आप powershell के साथ ठीक कर रहे हैं, इस प्रयास करें:

powershell.exe -c "gwmi Win32_NetworkAdapterConfiguration | ? { $_.IPAddress -ne $null } | % {$_.ipaddress[0]}" 
+0

मुझे थोड़ा उलझन में मिला (मैं आम तौर पर नौसिखिया हूं), मैं इसे भी देखूंगा और देख सकता हूं कि मुझे क्या मिलेगा! बहुत बहुत धन्यवाद। – Kondax

+1

और ऑफ कोर्स, आपको आउटपुट को File.txt पर रीडायरेक्ट करने की आवश्यकता होगी। मेरे कोड में नहीं जोड़ा गया। – anishsane

+0

वैसे भी शक्तियों का उपयोग करते समय, भयानक पार्सिंग क्यों करें? बस उपयोग करें: 'Get-NetIPAddress | % {$ _। IPAddress} ' –

6
for /f "tokens=2 delims=:" %%a in ('ipconfig^|find "IPv4 Address"') do (
set ip=%%a 
goto :BREAK 
) 

:BREAK 
echo %ip: =% >ip.txt 
+1

यह बहुत उपयोगी है! "सही" चिह्नित किए गए उत्तर से अधिक! – GavinWoods

0

आप autohotkey का उपयोग कर सकते हैं।

संदेश बॉक्स के लिए,

msgbox, %A_ipAddress% 

या आप में पाठ फ़ाइल उपयोगकर्ता

Fileappend, %A_ipaddress%. Ip.txt 

सहायक लिंक चाहते हैं। https://autohotkey.com/board/topic/45109-how-to-get-my-ip-address/