中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: FOR命令疑问 上一主题 | 下一主题
YoDe
中级用户




积分 224
发帖 102
注册 2007-11-9
状态 离线
『楼 主』:  FOR命令疑问

if exist ipconfig.txt del ipconfig.txt
ipconfig /all >ipconfig.txt
if exist phyaddr.txt del phyaddr.txt
find "Physical Address" ipconfig.txt >phyaddr1.txt
for /f "skip=2 tokens=12" %%M in (phyaddr.txt) do set Mac=%%M

if exist IPAddr.txt del IPaddr.txt
find "IP Address" ipconfig.txt >IPAddr.txt
for /f "skip=2 tokens=15" %%I in (IPAddr.txt) do set IP=%%I

arp -s %IP% %Mac%
问下for /f "skip=2 tokens=12" %%M in (phyaddr.txt) do set Mac=%%M
   和for /f "skip=2 tokens=15" %%I in (IPAddr.txt) do set IP=%%I
是否%%M="tokens=12"之后的单位
其中的%%M和%%I能否换成%%Q之类的 是否系统自定义%%M为什么意思
本人DOS菜鸟 求助高手解答
还有一事请教各位大侠。现在DOS书籍没有 有的也是基本的 我都会
什么《DOS大全》啊也没看过不知道里面写着什么东东 现在也没得买 想买书是不可能了 本人初中毕业 不晓得一些专业术语 比如什么是反转定义之类的 不知如何学起DOS 等待解答

2007-11-16 23:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  

%%M 也可以是别的,这完全取决于个人的兴趣爱好,就像你定义一个变量名一样,即自由又有限制。。。可以定义成%%a、%%b、%%A、%%Z,甚至可以是符号,比如%%#、%%[、%%]等等。。

关键是do后面的%%变量,要和in之前定义的%%变量一致就成了。

  Quote:
for /f "skip=2 tokens=12" %%M in (phyaddr.txt) do set Mac=%%M



2007-11-17 00:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
YoDe
中级用户




积分 224
发帖 102
注册 2007-11-9
状态 离线
『第 3 楼』:  

谢谢lxmxn 斑竹,
当我发出这篇帖子的20秒之后我已经明白了,
但不知/F是何意思 请解释的通俗点

FOR 变量是单一字母、分大小写和全局的;而且,
    同时不能有 52 个以上都在使用中。
请问什么是不能用52个以上都在使用中
运行这个批处理将会得到如下两个文件
tokens=12 其中没有delims= 是否是说以第一个字母单位如Physical开始计算
每格一个空格为分隔符。其中不填delims是否就是说以空格为分隔符
那么如何换成* 其“*”仅仅是代表*作为分隔符吗?
---------- IPCONFIG.TXT
        Physical Address. . . . . . . . . : 00-10-5C-C8-08-67

        Physical Address. . . . . . . . . : 00-53-45-00-00-00


---------- IPCONFIG.TXT
        IP Address. . . . . . . . . . . . : 192.168.1.8

        IP Address. . . . . . . . . . . . : 125.127.9.69

至于下面我就不太明白了
另外,FOR 变量参照的替换已被增强。您现在可以使用下列
选项语法:

     ~I         - 删除任何引号("),扩充 %I
     %~fI        - 将 %I 扩充到一个完全合格的路径名
     %~dI        - 仅将 %I 扩充到一个驱动器号
     %~pI        - 仅将 %I 扩充到一个路径
     %~nI        - 仅将 %I 扩充到一个文件名
     %~xI        - 仅将 %I 扩充到一个文件扩展名
     %~sI        - 扩充的路径只含有短名
     %~aI        - 将 %I 扩充到文件的文件属性
     %~tI        - 将 %I 扩充到文件的日期/时间
     %~zI        - 将 %I 扩充到文件的大小
     %~$PATH:I   - 查找列在路径环境变量的目录,并将 %I 扩充
                   到找到的第一个完全合格的名称。如果环境变量名
                   未被定义,或者没有找到文件,此组合键会扩充到
                   空字符串

可以组合修饰符来得到多重结果:

     %~dpI       - 仅将 %I 扩充到一个驱动器号和路径
     %~nxI       - 仅将 %I 扩充到一个文件名和扩展名
     %~fsI       - 仅将 %I 扩充到一个带有短名的完整路径名
     %~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充
                   到找到的第一个驱动器号和路径。
     %~ftzaI     - 将 %I 扩充到类似输出线路的 DIR

在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法
用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名
比较易读,而且避免与不分大小写的组合键混淆。
望斑竹讲解 我想搞懂了这些 我也算是DOS入门了吧?

2007-11-17 01:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
YoDe
中级用户




积分 224
发帖 102
注册 2007-11-9
状态 离线
『第 4 楼』:  

如果关闭这个批处理再手动运行另一个批处理变量是否还是存在

2007-11-17 01:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 5 楼』:  

多看看for的帮助吧,这要讲也不是一时半会儿能讲玩的。

关闭一个批处理之后变量就没了,除了系统的环境变量。。。

2007-11-17 04:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
YoDe
中级用户




积分 224
发帖 102
注册 2007-11-9
状态 离线
『第 6 楼』:  

不好意思我没说清楚
我说的就是系统的环境变量……是否会保存我知道有个SETlocal
和ENDLOCAL好像这两个英文是这样写的
如果这两个都不写 系统默认是改变环境变量吗?

2007-11-17 10:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 7 楼』:  

不会改变。

2007-11-17 21:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
YoDe
中级用户




积分 224
发帖 102
注册 2007-11-9
状态 离线
『第 8 楼』:  

谢谢lxmxn斑竹,那么
在SETlocal
是不是就保存在系统里?

2007-11-19 00:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 9 楼』:  

Re YoDe:

在命令行调用批处理脚本时,如果使用了setlocal,那么setlocal只是使当前批处理设置的变量在批处理程序内有效,批处理运行完了之后,变量不会影响调用此批处理的命令行。

当运行了一个带有Setlocal命令的批处理脚本之后,批处理末尾如果没有Endlocal命令,默认隐含一个。所以一般只写一个Setlocal就行了,Endlocal可以不要。

有时间多看看setlocal命令的帮助文档吧。

2007-11-19 00:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
YoDe
中级用户




积分 224
发帖 102
注册 2007-11-9
状态 离线
『第 10 楼』:  

那如果不使用setlocal 当前批处理设置的变量在批处理程序内会怎么样 有点不明白 既然是不会保存到本地化变量 那当SETLOCAL到底有何用处 可否举例
刚才发了一贴 现在手上需要一批处理解决
开机之后要有网络才运行这个程序 否则出错
我想FOR循环可以解决这问题吧
就是说在运行一个批处理 要在连上网络之后才运行这个EXE文件 前提 在没连上网络之前 这个批处理要一直运行 也就是说直到检测到网络才运行EXE 然后才EXIT
SETLOCAL我会慢慢研究 现在手上的事急需解决

2007-11-19 00:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dooomer
初级用户





积分 109
发帖 52
注册 2006-1-3
状态 离线
『第 11 楼』:  

:check_net
ping www.baidu.com||goto check_net
start 程序.exe

2007-11-19 13:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
YoDe
中级用户




积分 224
发帖 102
注册 2007-11-9
状态 离线
『第 12 楼』:  

谢谢 楼上的解答 你的方法很实用 可现在的情况是……
我这是网吧 路由的 现在能PING通外网却不能上网 原因是网吧的机子需要输入帐号密码
而在这段时间是不能上网的 因为收费软件的限制 但是能PING通外网 急啊 谁还有别的办法解决吗 其实就是说在登陆卡号之后运行这个软件 因为登陆卡号之就能上网了

2007-11-19 14:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
YoDe
中级用户




积分 224
发帖 102
注册 2007-11-9
状态 离线
『第 13 楼』:  

那么我想问一下有没有 不用PING而用别的批处理连接到网络 比如连接到百度而不是PING发送数据包 不晓得不登卡号能不能连百度 成功后 才运行后面的命令呢?

2007-11-19 15:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: