2012-12-13 15 views
7

Tôi muốn tạo một tập tin thực thi ghi địa chỉ IP cục bộ trên một tập tin txt. Khi tôi chạy một tập tin thực thi với mã này (đường dẫn tập tin là sai nhưng đó không phải là vấn đề):Viết địa chỉ IP cục bộ vào tập tin văn bản bằng cách sử dụng tập tin batch

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

tôi nhận được toàn bộ cấu hình cửa sổ IP (Tôi đã thay đổi một số con số và các công cụ với xxx để không hiển thị tất cả thông tin)

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

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

Tôi muốn ghi vào tệp chỉ 100.100.100.223.

Tôi mới làm quen với tệp hàng loạt và tôi thực sự đã tìm kiếm rất nhiều và tôi thực sự bối rối. (có thể tôi đang tìm kiếm với từ khóa sai).

Quên thông báo rằng tôi đang sử dụng Windows XP (Vì một số câu trả lời không hoạt động trên XP).

Trả lời

6

đọc dòng đầu tiên tập tin chỉ bằng văn bản của vào một biến bằng cách sử dụng lệnh SET /P, sau đó ghi đè lên tập tin với dòng rằng việc sử dụng ECHO:

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

UPDATE (trong câu trả lời cho ý kiến):

Để trích xuất chỉ là địa chỉ IP, bạn có thể sử dụng một vòng lặp FOR /F như thế này:

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 ) 

Một vòng lặp FOR /F cho phép bạn xử lý văn bản (một tập tin hoặc một chuỗi chữ) từng dòng, chia mỗi dòng vào các lĩnh vực (hoặc mã thông báo) dựa trên (các) dấu phân cách được chỉ định. Bạn có thể đọc thêm về lệnh này trong trợ giúp được tích hợp sẵn (FOR /?). Tôi sẽ chỉ thêm rằng trong trường hợp này phần được xử lý là một chuỗi chữ (giá trị là first_ip), dấu phân tách được đặt thành : và biến vòng lặp (%%I) nhận được mã thông báo 2 nd, là một địa chỉ IP .

Lưu ý rằng khoảng cách giữa : và IP được giữ nguyên, tức là nó trở thành một phần của mã thông báo ( 100.100.100.223) và do đó, cũng được ghi vào tệp. Nếu bạn không phải là rất hạnh phúc về điều đó, bạn có thể sử dụng một chương trình con để thoát khỏi không gian, như thế này:

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 

Khi chương trình con được gọi là (CALL :MyEcho %%I), các đối số được truyền cùng với không gian hàng đầu . Nhưng khi xử lý dòng lệnh của chương trình con, không gian đó không còn được xem như là một phần của giá trị, vì đối số không được trích dẫn và do đó trình phân tích cú pháp chỉ nhìn thấy một đối số được tách biệt với tên có hai dấu cách. Do đó, %1 trong chương trình con đánh giá đến địa chỉ mà không cần không gian hàng đầu.

+0

Cảm ơn bạn rất nhiều !!! tôi đã chính xác những gì tôi muốn! – Kondax

+0

Một điều nữa, với điều này tôi in "Địa chỉ IP........:: 100.100.100.223" , tôi có thể thay đổi nó thành chỉ "100.100.100.223" – Kondax

+1

Vui lòng xem cập nhật của tôi . –

0

Nếu bạn là OK với PowerShell, hãy thử này:

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

Tôi có chút bối rối ở đây (tôi thường là người mới), tôi cũng sẽ kiểm tra cái này và xem những gì tôi sẽ nhận được! Cảm ơn rất nhiều. – Kondax

+1

và tắt khóa học, bạn sẽ cần phải chuyển hướng đầu ra đến File.txt. Không được thêm vào mã của tôi. – anishsane

+0

Khi sử dụng powerhell anyways, tại sao vẫn làm phân tích khủng khiếp? Đơn giản chỉ cần sử dụng: '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

Điều này rất hữu ích! Nhiều hơn câu trả lời đã được đánh dấu "chính xác"! – GavinWoods