2010-7-28 版
2010-7-28 版 下载地址
http://www.fileden.com/files/2010/7/28/2926595/NC2010-7-28.rar
锁定和修改了以下几个问题:
1.
2010-7-26 初版 宽带连接 的 中文名称 问题:
宽带连接 的名称为中文时, 可备份, 但不能正常恢复, 原因为 备份文件 及 PBK 电话本文件采用了各种编码格式, 而批处理最易处理的只有 ANSI 编码, 加上代码中还有其它 BUG.
2.
2010-7-26 初版 宽带连接 的 名称 是英文时, 但有多个时, 也只能恢复第 1 个.
3.
在桌面建立快捷方式的参数都不正确.
4.
采纳 zjw767676 的建议, 将备份用的一个目录 D:\NCB 调整为 "硬盘上第 2 个盘符"\NCB,
如果连 第 2 个盘符也没有, 这个目录将是 C:\NCB.
2010-7-26 初版
此工具主要利用 netsh.exe (Windows 系统自带) 和 Dialupass.exe (dialup/RAS/VPN 账号密码工具)
来备份和恢复网络配置及dialup/RAS/VPN 账号和密码信息, 包括 PPPOE/ADSL 宽带连接类型的账号,密码,
导出 账号密码 时无须已连接网络, 网上许多其它的 ADSL/PPPoE 账号密码导出工具做不到这一点.
备份:
利用 netsh dump 来备份网络配置,
和 Dialupass.exe /stext <Filename> 来备份 dialup/RAS/VPN 账号和密码信息, 包括 PPPOE/ADSL 宽带连接类型
核心命令行格式如下:
>ScriptFile netsh dump
Dialupass.exe /stext Filename
备份的文件会存在以下各个地方:
%windir%\NCBackup
注册表 "HKCU\software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
下 Personal 指定的目录(在 winxp 中即"我的文档")下的 NCB 目录
"我的文档"目录\NCB
D:\NCB
如果检测有 U 盘类存储设备, 会在其根目录自动建立 NCB 目录, 再在 NCB 目录下建立 名为
%COMPUTERNAME%_MACADDRESS 的子目录, MACADDRESS 为当前一个活动网络连接对应的 MAC 地址, 例如:
计算机名为 PC, 而当前一个活动网络连接对应的 MAC 地址为 00:17:C4:8C:35:82, 那么子目录名为:
PC_00_17_C4_8C_35_82
再将生成的备份文件拷入 U 盘类存储设备根目录\NCB\PC_00_17_C4_8C_35_82 目录下.
恢复:
恢复网络配置
netsh exec ScriptFile
恢复 dialup/RAS/VPN 账号密码, 包括 PPPOE/ADSL 类宽带连接
Dialupass.exe /setpass <Entry Name> <User Name> <assword> <Domain>
恢复的依据文件是 D:\NCB 中日期最新的文件.
Dialupass.exe 下载页面
http://www.nirsoft.net/utils/dialupass.html
Dialupass.exe 下载地址
http://www.nirsoft.net/utils/dialupass.zip
备份配置 NCB.BAT- @echo off & setlocal enableDelayedExpansion
- title IP ^& dialup/VPN configuration backup
- :remself 备份保存所有的 dialup/VPN 帐号, 密码; IP 配置. network configuration backup
-
-
- for /f "tokens=2*" %%p in (
- 'reg query "HKCU\software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Personal^|more +4'
- ) do set PersonalNCB=%%~q\NCB
- set PersonalNCB=!PersonalNCB:\\=\!
- set WinNCB=%windir%\NCBackup
- set WinNCB=!WinNCB:\\=\!
-
- REM 找出硬盘上的第 2 个盘符, 若没有则设为 C: 盘
- for /f %%d in ('wmic logicaldisk where "DriveType=3" get DeviceID^|more +2') do set "2ndPttn=%%d" & goto :found2ndPttn
- set "2ndPttn=C:"
- :found2ndPttn
-
- for %%a in ("!WinNCB!" "!PersonalNCB!" "!2ndPttn!\NCB") do (
- REM echo %%~a
- >nul attrib -s -r -h "%%~a"
- if not exist "%%~a"\nul md "%%~a"
- attrib +s "%%~a"
- >nul attrib -s -h -r "%%~a"\desktop.ini
- >"%%~a"\desktop.ini (
- for /f "delims=" %%l in (%~s0) do (
- if /i "%%l"==":end:NCB\desktop.ini" set NCB_desktop_ini=0
- if "!NCB_desktop_ini!"=="1" echo %%l
- if /i "%%l"==":NCB\desktop.ini" set NCB_desktop_ini=1
- )
- )
- attrib +s +h +r "%%~a"\desktop.ini
- )
-
- cd /d %~dps0
- copy /y Dialupass Dialupass.exe && echo "%~dp0Dialupass.exe"
- >nul attrib -s -r -h Dialupass_lng.ini
- if exist Dialupass_lng.ini del Dialupass_lng.ini
-
- call :getDateTime dt
- >nul (
- attrib -r -s -h "!WinNCB!\netsh_dump_!dt!.txt"
- attrib -r -s -h "!WinNCB!\DialupassBackup!dt!.txt"
- )
-
- >"!WinNCB!\netsh_dump_!dt!.txt" netsh.exe dump
- Dialupass.exe /stext "!WinNCB!\DialupassBackup!dt!.txt"
-
- for %%a in ("!WinNCB!\netsh_dump_!dt!.txt" "!WinNCB!\DialupassBackup!dt!.txt") do (echo.&echo [%%a]
- attrib +r %%a
- echo =============================================================
- copy /y %%a !2ndPttn!\NCB && echo "!2ndPttn!\NCB\%%~nxa"
- copy /y %%a "!PersonalNCB!" && echo "!PersonalNCB!\%%~nxa"
- start notepad "!2ndPttn!\NCB\%%~nxa"
- )
-
- call :getCNMAC CNMAC
-
- for /f %%d in ('2^>nul wmic logicaldisk where "DriveType=2" get DeviceID^|more +1') do (
- if exist %%d\nul (echo.
- >nul attrib -s -r -h "%%d\!CNMAC!"
- if not exist "%%d\NCB\!CNMAC!"\nul md "%%d\NCB\!CNMAC!"
- attrib +s "%%d\NCB"
- >nul xcopy /y /h "!WinNCB!\desktop.ini" "%%d\NCB"
- copy /y "!WinNCB!\netsh_dump_!dt!.txt" "%%d\NCB\!CNMAC!" && echo "%%d\NCB\!CNMAC!\netsh_dump_!dt!.txt"
- copy /y "!WinNCB!\DialupassBackup!dt!.txt" "%%d\NCB\!CNMAC!" && echo "%%d\NCB\!CNMAC!\DialupassBackup!dt!.txt"
- start explorer "%%d\NCB\!CNMAC!"
- )
- )
-
- if /i "%1" neq "-a" (echo press any key to exit...&pause>nul)
- exit /b
-
- :getDateTime dt 获取当前日期时间到变量 dt
- set %1=!date::=_!!time::=_!
- set %1=!%1:\=_!
- set %1=!%1:/=_!
- set %1=!%1:^|=_!
- set %1=!%1:星期=!
- set %1=!%1: =_!
- exit /b
-
- :NCB\desktop.ini
- [.ShellClassInfo]
- IconFile="%SystemRoot%\system32\SHELL32.dll"
- IconIndex=150
- LocalizedResourceName=@netcfgx.dll,-24001
- InfoTip="网络配置备份"
- ConfirmFileOp=0
- :end:NCB\desktop.ini
-
- :getCNMAC CNMAC
- for /f "tokens=2 delims=[]" %%a in ('ping -n 1 %computername% ^| find "["') do (
- for /f "tokens=1-2" %%b in ('wmic nicconfig where "ipenabled='true'" get IPAddress^,MACAddress^|more +1') do (
- if "%%b"=="{"%%a"}" (
- set MAC=%%c
- set %1=%computername%_!MAC::=_!
- )
- )
- )
- exit /b
复制代码 配置恢复 NCR.BAT- @echo off & setlocal enableDelayedExpansion
- :remself 恢复最后保存的 dialup/VPN 帐号, 密码; IP 配置. network configuration backup
- :remself 可用的参数为 -a 可以自动运行.
- REM 在对 PBK 电话本文件的操作上, 以 ANSI 编码为基准.
- REM 因为 Windows Xp 系统下, 对 PBK 文件, 系统默认是按 UTF-8 无 BOM 格式处理的,
- REM 而且文件内部还有关于编码的问题, 即 Encoding 的值会指定其所在的一个条目下的编码是 什么
- REM Encoding=1 表明该条目按 UTF-8 处理
- REM Encoding=0 表明该条目按 ANSI 处理
- REM 但系统读取 PBK 文件后会自动将内部内容统一按 UTF-8 来重新保存, 原来指定的 Encoding=0 也会自动更改为 Encoding=1
- REM 本工具在对 PBK 文件追加条目时, 采取 Encoding=0 , 并以 ANSI 编码追加到 PBK 文件中. 系统读 PBK 后会统一成 UTF-8, 且 Encoding=1.
-
- REM 本工具应用的 Dialupass 版本为 3.06, 其 Dialupass.exe /stext 方式备份账号密码时, 输出文件的格式是 UCS-2 Little Endian
- REM 采用了编码转换工具 Ue2GB.vbs 将备份文件转换为临时的 ANSI 编码文件后, 再对其进行解析的.
-
- title IP ^& dialup/VPN configuration restore
-
- cd /d %~dps0
- (copy /y Dialupass Dialupass.exe)&& echo "%~dp0Dialupass.exe"
- call :genFile %~s0 U82GB_Force.vbs U82GB_Force_vbs
-
- REM 找出硬盘上的第 2 个盘符, 若没有则设为 C: 盘
- for /f %%d in ('wmic logicaldisk where "DriveType=3" get DeviceID^|more +2') do set "2ndPttn=%%d" & goto :found2ndPttn
- set "2ndPttn=C:"
- :found2ndPttn
-
- for /f "delims=" %%a in ('2^>nul dir !2ndPttn!\NCB\netsh_dump*.txt /o-d /b /s') do (
- echo 将恢复以下 IP 设置
- find /i "addr=" "%%a"
- if /i "%1" neq "-a" pause
- netsh exec "%%a"
- goto :restoreDialupass
- )
-
- :restoreDialupass
-
- set "DuBkANSI=!2ndPttn!\NCB\DuBkANSI.txt"
- for /f "delims=" %%a in ('2^>nul dir !2ndPttn!\NCB\DialupassBackup*.txt /o-d /b /s') do (
- Ue2GB.vbs %%~sa !DuBkANSI! /y
- set "lastEntryName="
- for /f "tokens=1-2 delims=:" %%b in ('type !DuBkANSI!') do (
- set b%%b=%%b
- set c%%c=%%c
- set c%%c=!c%%c:* =!
- set b%%b=!b%%b: =!
- set $!b%%b!=!c%%c!
-
- if "!$PhonebookFile!"=="!c%%c!" if defined $PhonebookFile if "!$EntryName!" gtr "" (
- call :newPPPOE $EntryName
- echo Dialupass /setpass "!$EntryName!" "!$UserName!" !$Password! !$Domain!
- Dialupass.exe /setpass "!$EntryName!" "!$UserName!" !$Password! !$Domain!
- start rasphone -d "!$EntryName!"
- )
- )
- start Control netconnections
- del !DuBkANSI!
- if /i "%1" neq "-a" pause
- exit /b
- )
- exit /b
-
- REM ============= end main program =====================================================================================
-
- REM 向 PBK 电话本文件中追加变量 EntryName 指定名称的条目, 并在桌面建立对应的快捷方式
- :newPPPOE EntryName
- REM 涉及到 rasphone.pbk 文件的编码和 find 查找兼容编码的问题, 此工具处理时以 ANSI 为基准.
- REM 关于两个键值 DialParamsUID, Guid, 本工具不生成, 代由系统自动生成.
- REM 打开 ncpa.cpl 刷新查看或 运行 rasdial ... 后, 系统会自动生成相关的键值.
- REM Guid 的键值也可用 MS 的工具 UUIDGEN 来生成, 下载: http://filediag.com/windows/process/Uuidgen.Exe.html
- REM PreviewUserPw=1 指定 提示名称, 密码和证书等.
-
- call :genLnkCreat_vbs %~s0 LnkCreat.vbs LnkCreat_vbs "!%1!"
- LnkCreat.vbs
- del LnkCreat.vbs
-
- set phoneBook="%AllUsersProfile%\Application Data\Microsoft\Network\Connections\Pbk\rasphone.pbk"
- set PBK_ANSI="%AllUsersProfile%\Application Data\Microsoft\Network\Connections\Pbk\rasphone_ANSI.txt"
-
- U82GB_Force.vbs !phoneBook! !PBK_ANSI!
-
- find /i "[!%1!]" !PBK_ANSI!>nul&&(
- echo [!%1!] 条目已存在于此 PBK 文件中: !phoneBook!
- exit /b
- )
- del !PBK_ANSI!
-
- echo 追加创建新条目 [!%1!] 到文件中: !phoneBook!
- >>!phoneBook! (
- echo.&echo [!%1!]
- for /f "delims=" %%a in (%~s0) do (
- if /i "%%a"==":end:phoneBook" set fileWriting=N
- if /i "!fileWriting!"=="Y" (echo %%a)
- if /i "%%a"==":phoneBook" set "fileWriting=Y"
- )
- )
- exit /b
-
-
- REM 在本批处理文件中提取 fileFlag 标志指定的文件模板部分, 并生成相应的文件
- :genFile sourceFile destFile fileFlag
- >%2 (
- for /f "delims=" %%a in (%1) do (
- if /i "%%a"==":end:%3" set fileWriting=N
- if /i "!fileWriting!"=="Y" (echo %%a)
- if /i "%%a"==":%3" set "fileWriting=Y"
- )
- )
- exit /b
-
-
- REM 生成建立桌面快捷方式的脚本
- :genLnkCreat_vbs sourceFile destFile fileFlag=LnkCreat_vbs lnkName 这里参数 fileFlag 只是一个占位形式, 实际执行无影响
- set "lnkName=%~4"& rem 采用 %~4 以允许参数传递时可以用双引号将含空格的 条目名称 括起完整传递到本过程, 而在这里再脱去双引号
- >%2 (
- for /f "delims=" %%a in (%1) do (
- if /i "%%a"==":end:LnkCreat_vbs" set fileWriting=N
- if /i "!fileWriting!"=="Y" (echo %%a)
- if /i "%%a"==":LnkCreat_vbs" set "fileWriting=Y"
- )
- )
- exit /b
-
-
- REM 桌面快捷方式生成脚本模板
- :LnkCreat_vbs
- Set WshShell = Wscript.CreateObject("Wscript.Shell")
- ' 创建一个快捷方式对象,其在桌面上设置相同的名字
- strDesktop = WshShell.SpecialFolders("Desktop")
- Set oShellLink = WshShell.CreateShortcut(strDesktop & "\\!lnkName!.lnk")
- ' 设置快捷方式的执行路径
- oShellLink.TargetPath = "rasphone.exe"
- oShellLink.Arguments = "-d ""!lnkName!""" ' 采用了两个转义的双引号将条目名称括起以支持 条目名称 含空格的情况.
- oShellLink.IconLocation = "rasphone.exe,0" ' 设置文件夹快捷方式的图标路径
- oShellLink.Description = "连接宽带连接 !lnkName!" ' 设置快捷方式的描述
- oShellLink.WorkingDirectory = "::{7007ACC7-3202-11D1-AAD2-00805FC1270E} :{BA126AD7-2166-11D1-B1D0-00805FC1270E}" ' 起始位置
- oShellLink.Save
- :end:LnkCreat_vbs
-
-
- REM UTF-8 转 ANSI 脚本工具, 原作者: fastslz @http://bbs.cn-dos.net, 此处减去了原有的参数, 文件头的判断代码部分
- :U82GB_Force_vbs
- aCode = "UTF-8"
- bCode = "GB2312"
-
- Set objArgs=WScript.Arguments
- Sourcefile=objArgs(0)
- Getfile=objArgs(1)
-
- Call WriteToFile(Getfile, ReadFile(Sourcefile, aCode), bCode)
- Wscript.Quit
-
- Function ReadFile (Sourcefile, CharSet)
- Dim Str
- Set stm = CreateObject("Adodb.Stream")
- stm.Type = 2
- stm.mode = 3
- stm.charset = CharSet
- stm.Open
- stm.loadfromfile Sourcefile
- Str = stm.readtext
- stm.Close
- Set stm = Nothing
- ReadFile = Str
- End Function
-
- Function WriteToFile (Getfile, Str, CharSet)
- Set stm = CreateObject("Adodb.Stream")
- stm.Type = 2
- stm.mode = 3
- stm.charset = CharSet
- stm.Open
- stm.WriteText Str
- stm.SaveToFile Getfile,2
- stm.flush
- stm.Close
- Set stm = Nothing
- End Function
- :end:U82GB_Force_vbs
-
-
- REM PBK 电话本文件模板, 因以 ANSI 操作为准, 故 Encoding=0; 其中两项 DialParamsUID, Guid 由系统自动生成.
- :phoneBook
- Encoding=0
- Type=5
- AutoLogon=0
- UseRasCredentials=0
- BaseProtocol=1
- VpnStrategy=0
- ExcludedProtocols=3
- LcpExtensions=1
- DataEncryption=8
- SwCompression=1
- NegotiateMultilinkAlways=0
- SkipNwcWarning=0
- SkipDownLevelDialog=0
- SkipDoubleDialDialog=0
- DialMode=1
- DialPercent=75
- DialSeconds=120
- HangUpPercent=10
- HangUpSeconds=120
- OverridePref=15
- RedialAttempts=3
- RedialSeconds=60
- IdleDisconnectSeconds=0
- RedialOnLinkFailure=1
- CallbackMode=0
- CustomDialDll=
- CustomDialFunc=
- CustomRasDialDll=
- AuthenticateServer=0
- ShareMsFilePrint=0
- BindMsNetClient=0
- SharedPhoneNumbers=0
- GlobalDeviceSettings=0
- PrerequisiteEntry=
- PrerequisitePbk=
- PreferredPort=
- PreferredDevice=
- PreferredBps=0
- PreferredHwFlow=0
- PreferredProtocol=0
- PreferredCompression=0
- PreferredSpeaker=0
- PreferredMdmProtocol=0
- PreviewUserPw=1
- PreviewDomain=0
- PreviewPhoneNumber=0
- ShowDialingProgress=1
- ShowMonitorIconInTaskBar=1
- CustomAuthKey=-1
- AuthRestrictions=632
- TypicalAuth=1
- IpPrioritizeRemote=1
- IpHeaderCompression=0
- IpAddress=0.0.0.0
- IpDnsAddress=0.0.0.0
- IpDns2Address=0.0.0.0
- IpWinsAddress=0.0.0.0
- IpWins2Address=0.0.0.0
- IpAssign=1
- IpNameAssign=1
- IpFrameSize=1006
- IpDnsFlags=0
- IpNBTFlags=0
- TcpWindowSize=0
- UseFlags=1
- IpSecFlags=0
- IpDnsSuffix=
-
- NETCOMPONENTS=
- ms_server=0
- ms_msclient=0
-
- MEDIA=rastapi
- Port=PPPoE5-0
- Device=WAN 微型端口 (PPPOE)
-
- DEVICE=rastapi
- PhoneNumber=
- AreaCode=
- CountryCode=1
- CountryID=1
- UseDialingRules=0
- Comment=
- LastSelectedPhone=0
- PromoteAlternates=0
- TryNextAlternateOnFail=1
- :end:phoneBook
复制代码
|