유틸리티 PE용 WIFI 자동연결 스크립트 3.15
2018.04.03 12:25
새로운 버전이 있습니다.
https://windowsforum.kr/9966964
이 글을 봐주세요. 이 글의 첨부파일은 삭제된 상태입니다.
=====================================================================
NETSH 명령어를 사용합니다.
PE에 따라서 DLL파일이 많이 다이어트 된 경우에는 올바르게 작동하지 않을 수 있습니다.
꼭 관리자 권한으로 실행하세요
===============================================
변경 내역
3.01
3월 11일 9시 24분
개별로 내보내기 때 INDEX파일 작성시 오타 수정
불러오기 때 변수 하나 덜 만드는것 수정
불러오기 30번까지로 확장
3.02
3월 11일 10시 20분 수정
내보내기 파일 기능 추가
3.03
3월 11일 10시 55분 수정
내보내기 기능 추가하다가 실수한부분 수정
주석 추가/코드 약간 정리
3.04
3월 11일 11시 07분 수정
약간의 표현 변경
+ 버전 숫자 추가, 하도 많이 수정해대서 내가 받은게 최신 맞는건가 싶으실까봐
앞으론 숫자 달아놓을겁니다. 제목에 써있는 숫자가 변하면 새로 받으세요.
3.05
3월 11일 14시 15분 수정
XML파일 편집 화면 안내 내용 수정
관리자 권한이 아니면 실행 안되게 막음
3.06
3월 12일 15시 26분 수정
INDEX 생성을 EXPORT에서 하는게 아니라 IMPORT에서 처리함
XML파일이 저장되는 폴더에서 자유롭게 XML파일을 삭제하고 PEnetwork에서 생성한 파일을
붙여넣어도 IMPORT.cmd로 적용 가능
3.07
4월 2일
(몇몇 오타 수정)
3.08
4월 3일 12시 23분 수정
해결된 문제:
윈도우 7에서 제대로 작동하지 않는 문제 (작동을 확인한 운영체제 : 7, 8.1, 10, 7 미만의 운영체제에선 실행 안되도록 변경)
여러개의 프로필이 저장되어있고 그중 한개의 프로필을 저장하려고 할 때 오류가 생기는 문제 (3.06에서 생긴 버그)
PE에 IMPORT_WLAN을 추가했을 경우 무선 인터넷 장치는 있으나 등록된 프로필은 없을 때 오류가 생기는 문제 등..
수정된 내용:
'XML파일을 저장할 드라이브'를 판단하는 기준이 바뀌었습니다.
변경 이전 : Documnet and Settings 폴더가 있는 드라이브
변경된 후 : 1. %systemdrive%가 C:일 경우 C:로 지정
: 2. %systemdrive%가 C:가 아니고 windows\win.tag 가 존재하는 경우 해당 드라이브로 지정.
: 3. %systemdrive%가 C:가 아니고 windows\win.tag 가 존재하지 않는 경우 Documnet and Settings 폴더가 있는 드라이브로 지정
3.09
(변경내용은 3.10과 같음, 테스트용 코드 안지우고 업로드해서 바로 삭제함. 혹시 받으신분은 새로 받으세요.)
3.10
4월 3일 18시 21분 수정
해결된 문제:
동일한 문구를 포함하고 있는 WiFi 프로필이 있는 경우 제대로 연결되지 않을 수 있는 문제
Import.cmd가 Findstr이 없는 PE에선 작동하지 않는 문제 (이제 Import.cmd는 Findstr이 필요하지 않습니다.)
Export.cmd 경로에 큰따옴표가 없는 부분이 있어서 임시파일 경로를 변경한 사용자의 경우 에러가 생길 수 있는 문제
복수의 프로필을 저장할 때 의도한것과 다른 메시지가 출력되는 문제
수정된 내용:
왕초보님의 도움으로 Import.cmd가 크게 개선되었습니다.
3.11
4월 3일 18시 51분 수정
Export.cmd 에 RD /S /Q 라고 적어야 할것을 RS /R /Q 라고 오타를 내서 임시폴더가 삭제가 안되는 문제 수정
~(3.12~3.14비공개)
3.15
4월 4일 01시 19분 수정
Export.cmd에서도 더이상 Findstr를 사용하지 않습니다.
Wi-Fi SSID에 -가 포함되어있는 경우 제대로 추출되지 않는 문제 수정 및 기타.
================================================================
내보내기 파일에 메인 메뉴를 추가했습니다.
무선 네트워크 장치를 검색하지 못한 경우 오류를 방지하기 위해 내보내기 메뉴 자체를 선택 불가능하게 막습니다.
3.06 버전부터 INDEX.CMD작성을 Import.cmd가 처리합니다.
평소엔 신경쓰지 않아도 적용할 때 자동으로 갱신합니다.
여러개의 XML파일 추출을 지원합니다.
다만 골라서 하는건 안되고, 한개 선택하거나 싹다 저장하거나 둘중 하나 골라야합니다.
고를게 없고 1개만 있으면 그냥 자동으로 1개만 추출합니다.
한글/띄어쓰기 되는것 확인했습니다.
매번 추출을 완료할 때 마다 새로운 INDEX.CMD 파일을 작성합니다.
그리고 INDEX파일을 이용해서 무식하게 대입한다음 맞는게 나오면 집어넣습니다.
웬만하면 FOR로 이쁘게 처리하려했는데
도저히 답이 안떠올라서 그냥 30개까지만 지원하게 해놨습니다.
알고는 있지만 고칠 수 있는 방법이 안떠오르는 오류 :
와이파이의 이름이
5G_WIFI
WIFI_5G
WIFI
와 같이 이름이 같고 앞뒤로 추가되는 문구만 있는 경우 WIFI_5G 안에 WIFI라는 문구 또한 들어있기때문에, 맞는 대상이라고 착각하는 경우가 생깁니다. 올바르지 않은 XML파일이 대입될 수 있습니다. 저런 경우 둘중 하나만 저장해서 사용하세요.
WIFI_GIGA_ABCD WIFI_ABCD 와 같이 맨 앞이나 뒤가 아닌 가운데에 다른 문구가 있는 경우에는 해당되지 않습니다.
3.10 버전부터 해결됨
또 엉뚱한 오류가 있을수도 있습니다.
오류 발견되면 알려주세요.
댓글 [13]
-
왕초보 2018.04.03 12:39
-
히이이잌 2018.04.03 13:08
아 느낌표가 그런 용도였군요
저도 각종 다른분들 스크립트를 다 저장해놓고
용도에 따라서 분리해놓고 그때그때 복사해서 쓰는지라
느낌표가 정확히 무슨 역할인지 잘 모르고 있었습니다.
delayedexpansion이랑 느낌표는 봐도 봐도 햇갈리네요..
일단 제가 30개로 그냥 돌려버린 가장 큰 이유는
SSID변수를 1씩 올려서 불러올 방법을 찾질 못해서였습니다. 저장된 index에서 이미 숫자가 붙어있어서,
SSID_1 다음에 SSID_2를 붙일 방법이 안떠오르더라고요
그래서 리다이렉션을 써서 아얘 즉석에서 다른 배치파일을 뽑아서 해볼까도 싶었는데 이 파일 처음 만들 당시에 머리아파서 포기했었습니다.
나중에 시간될 때 다시 시도해봐야겠습니다 조언 감사드립니다. -
왕초보 2018.04.03 15:20
좋은 작품이 그냥 나오는것이 아니죠..이렇게 고생을 하여 주신 덕분인것 같습니다
무선암호를 매번 입력하셨던분들이 계시면 이번 작품으로 편하게 사용하셨으면 좋겠습니다.
-
히이이잌 2018.04.03 17:39
왕고수님이 그런 말씀을 하실 필요가 있나요
사소한거라도 알려주시면 코드 작성이라는게 몇시간동안 혼자 고민해야할거 순식간에 실마리를 얻게 되니 그저 감사할 뿐입니다.
Export에서 전체 내보내기를 지원하는 이유는
말씀하신대로 일반적인 상황에서는 여러개의 프로필을 저장할 필요가 없는게 맞습니다.
그래서 권장하지 않는다는 문구도 적혀있습니다.
다만 집과 회사를 왔다갔다 하면서 사용하는 노트북 같은 경우에는,
노트북에 회사 와이파이와 집 와이파이가 둘 다 등록되어있을것이고,
이 두가지 프로필을 모두 내보내놓은 다음 Import에서 골라서 처리하게 하려고 모두 내보내기를 만들어 놓은것이었습니다.
즉 사용할 장소마다 한개의 프로필을 저장할 수 있게 하려는게 목표였습니다.
어쨋든 왕고수님 덕분에 제 나름대로 30번 뺑뺑이도 안돌고 findstr도 안쓰는 방법을 찾은 것 같습니다.
글 마지막에 적혀있던 손 떼고 있던 문제점도 해결된거같긴 한데 일단은 좀 더 테스트를 해봐야 할 것 같아요.
제 IMPORT.cmd파일에서 만드는 INDEX.CMD가 필요합니다.
즉 아래 코드가 작동하기 이전에
set Total=2set XML_1=olleh_WiFi_6DDE.xml
set XML_2=olleh_GiGA_WiFi_6DDE.xml
명령이 먼저 처리되어 있는 상황입니다.
:: 먼저 확장자명을 떼어내 SSID 변수값들을 만듭니다.
:: SSID_1, SSID_2....에 저장됩니다.
for /l %%a in (1,1,%Total%) do set SSID_%%a=!XML_%%a:.xml=!
:: netsh wlan show networks 명령의 결과를 ":" 기호를 기준으로 해서 토큰 두개로 받아냅니다.
:: 이렇게 되면 SSID가 포함된 문장이 %a 토큰에 SSID (번호), %b 토큰에 SSID가 들어오게 됩니다.
:: 단 %b 토큰이 "[공백 한칸]SSID"임에 주의해야합니다.
FOR /F "tokens=1,2 delims=: usebackq" %%a IN (`netsh wlan show networks`) DO (:: %%b 토큰 (공백한칸SSID와 앞서 만든 SSID_n 변수를 비교하여 일치하다면 MATCHED_SSID에 저장해줍니다.)
FOR /l %%i in (1,1,%Total%) do (
IF "%%b" EQU " !SSID_%%i!" set MATCHED_SSID=!SSID_%%i!
IF !MATCHED_SSID! NEQ 0 goto CONNECT
:: ↑ 공백한칸
)
)
:CONNECT
cls
echo.
echo 검색 완료.
echo.echo 선택된 XML파일 : %MATCHED_SSID%.xml
echo 선택된 WiFi SSID 이름 : %MATCHED_SSID%echo.
netsh wlan add profile filename="%XMLDIR%\%MATCHED_SSID%.xml"
netsh wlan connect name="%MATCHED_SSID%"
-
왕초보 2018.04.03 20:23
무선을 처음 연결할때 연결후 xml을 저장하기 때문에 집에서 처음 연결될때 한번, 회사에서 연결될때 한번 이렇게
한번씩을 생각을 했습니다.....엉뚱한 궁금증에서 자세히 설명을 해주셔서 감사합니다..
-
히이이잌 2018.04.03 21:50
저도 비슷한 생각을 했었기 때문에,
INDEX.CMD는 사실 자동으로 즉석에서 작성하고 사용자 입장에선 신경 쓸 필요 없도록 변경했습니다.
버전을 올릴수록 점점 그런 방향으로 바꾸다가 3.10부터는 아얘 언급을 빼버렸습니다.
-
마라톤2 2018.04.03 12:57
감사합니다. ^_^
-
cungice 2018.04.03 13:11
노고 들이 많으십니다. 감사합니다.
-
元石 2018.04.03 19:01
배치파일의 내부를 살펴보면서 덕분에 여러모로 공부가 잘 되고 있네요. 이번에도 고생하셨습니다. (__)
-
빠송 2018.04.03 21:55
감사합니다.
유용하게 잘 사용 하겠습니다.
-
왕초보 2018.04.03 23:13
Export_WLAN.cmd 에서 xml 저장이 이름이 잘려서 저장되는 경우가 있습니다..
1. 내보내기를 하여서 프로필을 저장하는 것을 캡쳐를 하였습니다...
2. 하드에 저장된 파일 이름을 보여주고 있습니다..그런데 이름이 잘렸습니다... 그 많은 이름 중에서 하필이면 "Boss-N604R" 입니다..
중간에 "-"가 있어서 SSID 이름도 분리가 되었습니다..
3. 실제 저장된 xml피일 이름입니다..
4. 저장된 xml 파일 이름이 SSID 이름과 일치하지 않아서..등록이 되지 않습니다..
5. 개인적인 생각입니다..for문으로 간단히 문자열을 자르게 되는 경우 하필이면...저처럼 "-"가 들어간 경우 파일이름이 SSID와 다르게 될수가 있습니다.. 파일이름 전체에서 앞의 Wi-FI- 문자열을 잘라내것으로 추출하는것도 하나의 방법이 될것 같습니다
-
히이이잌 2018.04.03 23:47
아무래도 앞에서부터 글자수를 세어서 짜르는게 제일 안정적일 것 같습니다.
일단 잠깐 테스트해봤는데 되는것 같네요.
일단 Findstr관련 부분은 왕초보님이 알려주신대로 바꿔놨습니다.
::============================================================================================
::
:: 내보내기 시작
::
::============================================================================================:: 선택창 생략한경우
:SEL_SKIP
set XML_Number=1
set MAX=1:: 1개 선택
:EXPORT
cls
for /f "tokens=1* delims=? usebackq" %%a in ("%temp%\WXML\xml%XML_Number%.txt") do set Wi-Fi-XMLFILE=%%a&&set Wi-Fi-SSID=%%~na
if /i "%OS7%" == "1" set SSID=%Wi-Fi-SSID:~11,9999%
if /i "%OS7%" == "0" set SSID=%Wi-Fi-SSID:~6,9999%
set XMLFILE=%SSID%.xml
IF NOT EXIST "%WinDRV%\Windows\PE_WIFI_SET" md "%WinDRV%\Windows\PE_WIFI_SET"
IF EXIST "%WinDRV%\Windows\PE_WIFI_SET\%XMLFILE%" del /q "%WinDRV%\Windows\PE_WIFI_SET\%XMLFILE%"
ren "%temp%\WXML\%Wi-Fi-SSID%.xml" "%XMLFILE%"
move /y "%temp%\WXML\%XMLFILE%" "%WinDRV%\Windows\PE_WIFI_SET\">nul
goto DONE
:: 모두 복사
:COPY_ALL
cls
mode con cols=80 lines=20
for /l %%a in (1,1,31) do (
IF NOT EXIST "%temp%\WXML\xml%%a.txt" set /a MAX=%%a-1&&goto loop_start
):loop_start
set XML_Number=0
:loop
set /a XML_Number=%XML_Number%+1
for /f "tokens=1* delims=? usebackq" %%a in ("%temp%\WXML\xml%XML_Number%.txt") do set Wi-Fi-XMLFILE=%%a&&set Wi-Fi-SSID=%%~na
if /i "%OS7%" == "1" set SSID=%Wi-Fi-SSID:~11,9999%
if /i "%OS7%" == "0" set SSID=%Wi-Fi-SSID:~6,9999%
set XMLFILE=%SSID%.xml
IF NOT EXIST "%WinDRV%\Windows\PE_WIFI_SET" md "%WinDRV%\Windows\PE_WIFI_SET"
IF EXIST "%WinDRV%\Windows\PE_WIFI_SET\%XMLFILE%" del /q "%WinDRV%\Windows\PE_WIFI_SET\%XMLFILE%"
ren "%temp%\WXML\%Wi-Fi-SSID%.xml" "%XMLFILE%"
move /y "%temp%\WXML\%XMLFILE%" %WinDRV%\Windows\PE_WIFI_SET\>nul
IF %MAX% GTR %XML_Number% goto loop
goto DONE
-
*자유인* 2018.04.04 09:33
수고 많으셨습니다. ^.^
와! 업데이트 되었네요..감사합니다