中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 实现 智能读取一个TXT文件某个段中信息。
作者:
标题: 实现 智能读取一个TXT文件某个段中信息。 上一主题 | 下一主题
newaifi
初级用户





积分 154
发帖 67
注册 2006-10-31
状态 离线
『楼 主』:  实现 智能读取一个TXT文件某个段中信息。 使用 LLM 解释/回答一下

想编写一个自动修改计算机名和IP。DNS等的BAT。。
重点在于能在一个TXT文件中找到对应网段中的计算机以分配IP地址。

比如TXT文件如下:

GateWay: 192.168.0.(?) // 0 网段机器的IP列表。

User001=1
User002=2

GateWay: 192.168.1.(?) // 1 网段机器的IP列表。

User003=3
User004=4

::: User004=4 表示 计算机名称为User004的机器IP尾数为4

如果现在我要分配的机器名称是User004 ,怎么让其自动识别自身所在的网段?

\\ 该功能我以用VBS实现..但我相信DOS下一定还是有解决办法的..


以下是我今天上午编写的一个要求输入计算机名称和网段数及网关尾数的BAT.

**************************************************
@cls
@color 2f & Title IP地址修改工具
@echo off
@echo ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
@echo ※请输入您要定义的计算机名称. ※
@echo ※ ※
@echo ※ (例:PC-01;User001;) ※
@echo ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
Set /p User=""
@cls


@echo ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
@echo ※请输入您当前使用的网段. ※
@echo ※ ※
@echo ※ (例:192.168.1.245,请输入1;192.168.0.245,请输入0;) ※
@echo ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
Set /p aidi2=""
@cls


@echo ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
@echo ※请输入你网关地址的最后一位数. ※
@echo ※ ※
@echo ※ (例:192.168.1.245,请输245;) ※
@echo ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
Set /p GateWay=""
@cls

Set NetMask=255.255.255.0
Set DNS1=61.153.177.196
Set DNS2=61.153.177.197
rem 如果您的DNS地址不是以上所示,请自行更改.

Set Aidi=192.168

IF Exist Name.ax Del Name.ax
Find /i "%User%" ip.ax >>Name.ax
For /f "skip=2 tokens=2 delims==\" %%A in (Name.ax) Do Set aidi3=%%A

@ipconfig /all >ipconfig.ax
@if exist name.pak del name.pak
@find "Ethernet adapter" ipconfig.ax>>name.pak
@for /f "skip=2 tokens=3,4 delims=: " %%A in (name.pak) do set Name=%%A %%B
@cls

@echo ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
@echo ※您的计算机名称是 "%User%" ※
@echo ※您的IP地址是 "%aidi%.%aidi2%.%aidi3%" ※
@echo ※您的子网掩码是 "%NetMask%" ※
@echo ※您的网关地址是 "%aidi%.%aidi2%.%GateWay%" ※
@echo ※您的DNS地址分配为 "%DNS1%,%DNS2%" ※
@echo ※ 当前网卡: "%Name%" ※
@echo ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

@echo ※ 确认无误后请按任意键执行修改操作.否则请停止该程序. ※
@pause >log.pak

@echo ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
@echo ※ ※
@echo ※ 程序正在执行操作,请稍候....... ※
@echo ※ ※
@echo ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

Reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" /v ComputerName /t reg_sz /d %User% /f >log.pak
@netsh interface ip set address "%Name%" static %aidi%.%aidi2%.%aidi3% %NetMask% %aidi%.%aidi2%.%GateWay% 1 >log.pak
@netsh interface ip set dns "%Name%" static %DNS1% >log.pak
@netsh interface ip add dns "%Name%" %DNS2% >log.pak
@cls

@echo ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
@echo ※ 恭喜您!修改成功了. ※
@echo ※ ※
@echo ※ 该程序由韩和编写制作.您可以传播本程序,但请保留本版权信息! ※
@echo ※ ※
@echo ※ 按任意键退出程序 ※
@echo ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
@pause >log.pak
@if exist name.pak del name.pak
@if exist ipconfig.ax del ipconfig.ax
@if exist Name.ax del Name.ax
@if exist log.pak del log.pak


2006-10-31 03:18
查看资料  发短消息  网志   编辑帖子  回复  引用回复
utem999
初级用户




积分 135
发帖 54
注册 2006-9-10
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下

好像改不了
XP SP2


2006-10-31 03:47
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
zerocq
中级用户




积分 458
发帖 196
注册 2006-10-5
状态 离线
『第 3 楼』:   使用 LLM 解释/回答一下

刚写的,只在你给的txt内容里测试了
@echo off
set host=003
for /f "tokens=1-2 delims=:/" %%a in (test.txt) do (
@echo %%a|find "Gate">nul&&set gateway=%%b
@echo %%a|find "%host%">nul&&goto :gate
)
goto :eof

:gate
echo %host%所在网段%gateway%
pause

找出目标主机上边最近的一句gateway

LZ试下合不合适:)

Last edited by zerocq on 2006-10-31 at 04:20 AM ]


2006-10-31 04:14
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
newaifi
初级用户





积分 154
发帖 67
注册 2006-10-31
状态 离线
『第 4 楼』:   使用 LLM 解释/回答一下

感谢回复 受益匪浅

待测试。。

希望大家不要抱旁观态度。讨论才有进步。


2006-10-31 22:55
查看资料  发短消息  网志   编辑帖子  回复  引用回复
newaifi
初级用户





积分 154
发帖 67
注册 2006-10-31
状态 离线
『第 5 楼』:   使用 LLM 解释/回答一下

测试通过. 不过在下存在一个疑惑..
"语句":

For /f "tokens=1-2 delims=:/" %%c in (ip.ax) do (
@echo %%c|find /i "Gateway">nul&&Set Gateway=%%d
@echo %%c|find /i "%User%">nul&&Goto :Gate
)
Goto :eof
:Gate
@echo %Gateway%>Temp.ax
For /f "tokens=3 delims=./" %%e in (Temp.ax) do Set aidi2=%%e

如果我把语句替换成如下所显就提示出错..还望为兄解释.

For /f "tokens=1-2 delims=:/" %%c in (ip.ax) do (
@echo %%c|find /i "Gateway">nul&&Set Gateway=%%d
@echo %%c|find /i "%User%">nul&&@echo %Gateway%>Temp.ax
)
For /f "tokens=3 delims=./" %%e in (Temp.ax) do Set aidi2=%%


2006-11-2 02:31
查看资料  发短消息  网志   编辑帖子  回复  引用回复
newaifi
初级用户





积分 154
发帖 67
注册 2006-10-31
状态 离线
『第 6 楼』:   使用 LLM 解释/回答一下

完整代码如下所示.帖出来供有需要的人使用.大家也可以拿去学习研究.

******************* Setip 主程序 部分 **********************

@cls
@echo off
@color 2f&@Title 计算机IP设置程序 v1.0
@echo ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
@echo ※请输入您要定义的计算机名称. ※
@echo ※ ※
@echo ※ (例:PC-01;User001;) ※
@echo ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
Set /p User=""
@cls

Set NetMask=255.255.255.0
Set DNS1=61.153.177.196
Set DNS2=61.153.177.197
rem 如果您的DNS地址不是以上所示,请自行更改.

Set Aidi=192.168

IF Exist Name.ax Del Name.ax
Find /i "%User%" ip.ax >>Name.ax
For /f "skip=2 tokens=2 delims==\" %%A in (Name.ax) Do Set aidi3=%%A

For /f "tokens=1-2 delims=:/" %%c in (ip.ax) do (
@echo %%c|find /i "Gateway">nul&&Set Gateway=%%d
@echo %%c|find /i "%User%">nul&&Goto :Gate
)
Goto :eof
:Gate
@echo %Gateway%>Temp.ax
For /f "tokens=3 delims=./" %%e in (Temp.ax) do Set aidi2=%%e

@ipconfig /all >ipconfig.ax
@if exist name.pak del name.pak
@find "Ethernet adapter" ipconfig.ax>>name.pak
@for /f "skip=2 tokens=3,4 delims=: " %%A in (name.pak) do set Name=%%A %%B
@cls

@echo ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
@echo ※您的计算机名称是 "%User%" ※
@echo ※您的IP地址是 "%aidi%.%aidi2%.%aidi3%" ※
@echo ※您的子网掩码是 "%NetMask%" ※
@echo ※您的网关地址是 "%GateWay%" ※
@echo ※您的DNS地址分配为 "%DNS1%,%DNS2%" ※
@echo ※ 当前网卡: "%Name%" ※
@echo ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

@echo ※ 确认无误后请按任意键执行修改操作.否则请停止该程序. ※
@pause >log.pak

@echo ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
@echo ※ ※
@echo ※ 程序正在执行操作,请稍候....... ※
@echo ※ ※
@echo ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

Reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" /v ComputerName /t reg_sz /d %User% /f >log.pak
@netsh interface ip set address "%Name%" static %aidi%.%aidi2%.%aidi3% %NetMask% %Gateway% 1 >log.pak
@netsh interface ip set dns "%Name%" static %DNS1% >log.pak
@netsh interface ip add dns "%Name%" %DNS2% >log.pak
@cls

@echo ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
@echo ※ 恭喜您!修改成功了. ※
@echo ※ ※
@echo ※ 该程序由韩和编写制作.您可以传播本程序,但请保留本版权信息! ※
@echo ※ ※
@echo ※ 按任意键退出程序 ※
@echo ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
@pause >log.pak
@if exist name.pak del name.pak
@if exist ipconfig.ax del ipconfig.ax
@if exist Name.ax del Name.ax
@if exist log.pak del log.pak
@if exist temp.ax del temp.ax

************************ END *****************************

******************** ip.ax IP配制文件部分 ********************

Gateway:192.168.0.1

User001=1
User002=2
11-pc=66
.....

Gateway:192.168.1.1

User182=182
User183=183
12-pc=67

Gateway:192.168.3.1

BG001=1
BG002=2
BG003=3


// End .......


2006-11-2 02:34
查看资料  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: