1

私はcmdなどにあまり精通していませんが、いくつかの調査を行い、必要なものを少しまとめました。私が作成しようとしているこの.batは、ipconfig / allの出力を取得し、イーサネットアダプターのMACアドレスとIPアドレスを選択して、コンピューターがインストールしない場合に、それらのインスタンスの事前に指定されたURLの主要な場所に挿入します。ホテルのインターネット課金設定のフロントページに自動的にリダイレクトされます。これは公式の仕事ではありません。私は少しだけ「負担を軽減」してタイピングの時間を節約しようとしています。

.txtに作成する必要のある完全なアドレスは000.000.000.00/defaulta.php?mac = xxxxxxxxxxxx&ip=xxx.xxx.xx.xxxです。

macアドレスとipアドレス(両方ともxとしてリストされている)以外はすべて、すべての場合に必要なものとまったく同じです。0で検閲されて表示されているIPアドレスは、セキュリティ上の理由から意図的に変更されており、そのための作業は必要ありません。簡単なアクセスのために、任意のユーザーのデスクトップにipconfigデータの出力を作成するための単純な.batを作成することができました。

@echo off
ipconfig/all > %userprofile%\Desktop\url_address.txt

他の解析ソリューションを使用して必要なデータを取得しようとしましたが、最も簡単に適応できるもの(ここにリンクされています)は、最も単純な置換を行ったときに最初のインスタンスまたはその間のインスタンスではなく、最後のインスタンスのみを出力します。特定の回線のみを選択するためのソリューションの1つを使用することもできますが、一部のコンピューターは最初にイーサネットをリストし、次にワイヤレスをリストし、他のコンピューターは最初にワイヤレスをリストし、次にイーサネットをリストします。客室内では無線インターネットが利用できないため、特にイーサネット回線に基づいて解析する必要があります。

これが私のパーソナルPCからの出力の例です:

Ethernet adapter Local Area Connection:

Connection-specific DNS Suffix  . : xxxx.net
Description . . . . . . . . . . . : Atheros AR8121/AR8113/AR8114 PCI-E Ethernet Controller
Physical Address. . . . . . . . . : xx-xx-xx-xx-xx-xx
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
Link-local IPv6 Address . . . . . : xxxx::xxxx:xxxx:xxxx:xxxx%12(Preferred) 
IPv4 Address. . . . . . . . . . . : xxx.xxx.xx.xxx(Preferred)

自分で調べて比較すると、長さがすべて同じではないことがわかります。したがって、ゲストごとにカードが異なるため、文字の長さに基づいた解析は機能しません。つまり、物理的な2つの特定のポイントを解析する必要があります。 URL内のMacのアドレスとURL内のIPアドレスのipv4アドレス。これは、解析ごとに1つずつ、合計2つのテキストを作成する必要があることを意味しますか?そして、これら2つの変数を最終的なURLにどのように挿入できるのでしょうか。

だから私の主な質問は:

1)イーサネットデータから必要な2つの部分を取得し、それらを必要なリンクの適切な場所に挿入して.txtに入れることは可能ですか?その場合、正確に何をする必要がありますか?

2)私が意図する完全な機能は、機能が最終的な解決策に進むときに書き込まれるいくつかの.txtファイルを介して実行する必要がありますか、それともすべてをゲストのデスクトップ上の1つのテキストファイルに出力して、整理して削除しやすくすることができますか?

4

1 に答える 1

0

質問はtl;drでした。これはあなたが探していることをしますか?xxxx.net必要に応じて変更000.000.000.00します。

@echo off
setlocal enabledelayedexpansion
set found=0
for /f "tokens=1,2 delims=:(" %%I in ('ipconfig /all') do (
    if !found!==1 (
        for /f %%x in ('echo "%%I" ^| find "Physical Address"') do set mac=%%J
        for /f %%x in ('echo "%%I" ^| findstr "IP[v4]*.Address"') do (
            set ip=%%J
            goto next
        )
    )
    for /f %%x in ('echo "%%J" ^| find /i "xxxx.net"') do set found=1
)
echo Couldn't scrape info.  Press any key to exit.
pause >NUL
goto :EOF

:next
set mac=%mac: =%
start http://000.000.000.00/defaulta.php?mac=%mac:-=%^&ip=%ip: =%

を実行して出力をループし、 (接続固有のDNSサフィックス)ipconfig /allに遭遇するまですべてを無視します。xxxx.net次に、そこからアドレスを探しPhysical AddressIPv4アドレス指定します。スペースは両方のキャプチャから削除する必要があり、ダッシュはすべて可変文字列置換によってMACアドレスから削除する必要があります。次に、ユーザーのデフォルトのWebブラウザーを起動して、作成したURLにアクセスします。

このURLを起動する代わりにテキストファイルに書き込む必要がある場合は、変更してください

start http://000.000.000.00/defaulta.php?mac=%mac:-=%^&ip=%ip: =%

echo http://000.000.000.00/defaulta.php?mac=%mac:-=%^&ip=%ip: =% >outfile.txt

>Windowsがstdoutを、IPアドレスの末尾の数字ではなく、テキストファイルにリダイレクトするように、必ず前にスペースを入れてください。


更新2013.02.27:

上記のものは、ユーザーアクセスレベル(管理者または通常のユーザー)に関係なく機能するはずです。非特権ユーザーとしての実行をシミュレートする場合は、次のコマンドを実行します。

runas /trustlevel:0x20000 cmd

...制限された権限でcmdプロンプトを開きます。次に、それがまだ機能していることを自分で確認できますipconfig /all

価値があるのipconfig /allは、IPアドレスとMACアドレスを取得する場所だけではありません。上記のスクリプトの代替が必要な場合は、次のスクリプトを試してください。

@echo off
setlocal
for /f "tokens=1,2 delims=={}," %%I in (
    'wmic nicconfig where ^(ipenabled^='TRUE' and dnsdomain is not null^) get ipaddress^, macaddress /format:list'
) do (
    if %%I==IPAddress set ip=%%~J
    if %%I==MACAddress set mac=%%J
)
start "" "http://000.000.000.00/defaulta.php?mac=%mac::=%&ip=%ip%"

以前と同様に、URLのIPアドレスを必要に応じて変更することを忘れないでください。


2013.03.29を更新:

さて、すべてのクライアントコンピュータで(wmicWinXP Homeでは機能しないように)他に何も機能していないので、何よりもできるかどうかを確認するために、もう1つ試してみてください-バッチ/JScriptハイブリッドスクリプト。これを拡張機能と一緒に保存すると、.bat98以降のすべてのバージョンのWindowsとME(正しく思い出せばMistake Edition)で動作するはずです。

000.000.000.00以前と同様に、URLで置き換えることを忘れないでください。

@if (@a==@b) @end /* <-- ignore this, please

:: batch portion

@echo off
setlocal
for /f "tokens=1,2" %%I in ('cscript /nologo /e:jscript "%~f0"') do (
    set mac=%%I
    set ip=%%J
)

start "" "http://000.000.000.00/defaulta.php?mac=%mac::=%&ip=%ip%"

goto :EOF

:: JScript portion  (leave this weird bit here, please) --> */

var wmi = GetObject("winmgmts:\\\\.\\root\\cimv2");
var adapters = wmi.InstancesOf("Win32_NetworkAdapterConfiguration");
for (var res=new Enumerator(adapters); !res.atEnd(); res.moveNext()) {
    var adapter = res.item();

    /* -------------------------------------------------------------
    Note to supergaijin: If this script fails like all the others,
    try removing "|| !adapter.DNSDomain" from the following line so
    it reads as follows:  if (!adapter.IPEnabled) continue;
    ------------------------------------------------------------- */

    if (!adapter.IPEnabled || !adapter.DNSDomain) continue;
    WSH.Echo(adapter.MACAddress + ' ' + adapter.IPAddress.toArray()[0]);
}

クレジット:WMIExplorerを使用してクラスWin32_NetworkAdapterConfigurationに遭遇しました。Scriptomatic(TechNetのドキュメントよりもはるかに便利でした)を使用して、子インスタンスをクエリする方法を理解しました。

于 2013-02-11T19:24:22.647 に答える