![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-12 11:39 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » for 里面的一个现象 |
| 可打印版本 1,175 / 3 |
| 第1楼 rs369007 | 发表于 2010-05-02 16:02 |
| 初级用户 发帖 131 积分 147 | |
|
for 里面的一个现象 @echo off & setlocal enabledelayedexpansion
for /f "tokens=2 delims=:" %%c in ('ipconfig/all ^|find "DNS Servers"') do ( set DNSservers=%%c echo !DNSservers!+ echo +!DNSservers! echo !DNSservers:~1!+ echo +!DNSservers:~1! ) pause ------------------------------------------- 运行结果: +218.6.132.39 ‘+’ 将空格占了 + 218.6.132.39 +18.6.132.39 ‘+‘将2给占了 32.39 ? |
|
| 第2楼 qzwqzw | 发表于 2010-05-02 17:18 |
| 银牌会员 发帖 636 积分 2,343 | |
|
问题在于ipconfig
在它的输出文本中 每行末尾都会多一个回车符(\r,CR,0x0d) 也就是它的每行行尾都是\r\r\n 多出来的\r被for/f提取到并存储到变量中 而你的例子 因为没有将空格设为delims 所以IP前的空格也被存到变量中 所以变量DNSservers的值为 <空格>218.6.132.39<回车> 而Echo变量的时候 回车符的作用是使光标回到本行行首 所以才会出现+把空格或者其它行首字符挤占的情况 如果你把加号换成其它多字符的字符串 就会发现有更多的IP字符被后面的字符串覆盖 参考: 不能说的秘密-CMD命令奇诡语法特性汇集 http://www.cn-dos.net/forum/viewthread.php?tid=50912 [ Last edited by qzwqzw on 2010-5-2 at 17:19 ] |
|
| 第3楼 HAT | 发表于 2010-05-02 18:34 |
| 版主 发帖 5,017 积分 9,023 | |
|
Vista、Win7系统没有这个问题
|
|
| 第4楼 rs369007 | 发表于 2010-05-02 21:05 |
| 初级用户 发帖 131 积分 147 | |
|
刚在c里面测试确实如此
char carriage={'p','i','n','g','\r','\0'}; fprintf(stdout,"%s",carriage); 编译成test.exe test&echo in 运行结果是:inng 将ipconfig/all 保存在文本,但是我用fscanf读不到这个‘\r',strlen(),也显示为12个字符,可能fscanf把’\r' 过滤掉了吧 [ Last edited by rs369007 on 2010-5-2 at 21:09 ] |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |