Board logo

标题: [文本处理] [已解决]菜鸟的几个小问题 [打印本页]

作者: ligyste    时间: 2015-7-25 17:53     标题: [已解决]菜鸟的几个小问题

本帖最后由 ligyste 于 2015-8-6 08:28 编辑

不才最近开始学习批处理,参考各位前辈的批处理时发现一些不懂的地方,特来求教
这是一段网上找到的显示IP地址的代码
for /f "tokens=2 delims=:" %%i in ('ipconfig^|findstr "IP Address"') do echo IP地址=%%i
问题1:其中的^|是什么意思啊,看教程上说^是把取消特殊字符的功能,把这个特殊字符当做一个普通字符来对待,而|是把前边命令的结果当做后边命令的参数,照理说这里只需要|就够了,但是实际测试不行。
问题2:把ipconfig命令的结果显式出来的话,关键的一行是     IPv4 地址 . . . . . . . . . . . . : 192.168.128.1,
不管是把ipconfig命令的结果直接在CMD窗口显示出来还是用>导出到txt,都没有发现其中包含  IP Address  ,那么,为什么这条批处理能够正确显示IP地址呢?

这是一段在win7下取得桌面路径的代码,由于注册表的键值类型是reg_expand_sz,导出为文本文件后是十六进制代码
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"^|findstr /i
"Desktop"') do (
  set "str=%%i"
  set "str=!str:*reg_expand_sz=!"
  for /f "tokens=*" %%a in ("!str!") do set DesktopPath=%%~a
)

问题3:其中reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"命令中关键的一行结果是
    Desktop    REG_EXPAND_SZ    %USERPROFILE%\Desktop
其中没有包含",那么之前的delims="中为什么要用"作为分隔符呢?我改为delims= (用空格作为分隔符)后提示  此时不应有 Shell。
问题4:set "str=!str:*reg_expand_sz=!"两边的!是什么意思,str:*reg_expand_sz=又是什么意思?
在下菜鸟一只,请各位高人不吝赐教!
作者: DAIC    时间: 2015-7-25 17:57

不相关的问题建议分开发帖
作者: aa77dd@163.com    时间: 2015-7-25 19:12

楼主的问题描述得很清晰,这样的求助帖一般是容易赢得答复的

但我觉得楼主的理解能力,逻辑思维都并不差

所以我觉得楼主首先需要的是 ntcmds.chm

在 windows 目录中可以找到,或者找出本论坛上已有的下载地址



中英文版本都有,这是微软官方教程,尽管其中存在一些错漏,但权威性仍是不容置疑的


教程篇幅很小  楼主阅读后再提疑问不迟
作者: aa77dd@163.com    时间: 2015-7-25 19:15

同时不要忘记一个配套教程

/? 参数,微软命令行程序几乎都有这个参数
作者: DAIC    时间: 2015-7-25 21:27

批处理for命令中的管道符为何要用尖号^进行转义?
http://bbs.bathome.net/viewthread.php?tid=1290&page=2#pid6306
作者: DAIC    时间: 2015-7-25 21:30

findstr "IP Address" 本身是一个不严谨的写法
它查找的是IP和Address这两个字符串,但是运气好,IPv4正好匹配上了IP这个字符串
如果要匹配"IP Address"这一个字符串应该是 findstr /c:"IP Address"
作者: /zhqsystem/zhq    时间: 2015-7-25 23:13

这是一段在win7下取得桌面路径的代码,由于注册表的键值类型是reg_expand_sz,导出为文本文件后是十六进制代码

这个不是进制问题吧,这是多字符串既然是字符串就不会区分进制(只被当成字符来解析),
"delims="这才是分割的参数吧,不知道楼主怎么把这个读出分割引号的(引号貌似不可以分割吧),
默认情况下是分割空格,如果去除这个参数会变成括号内所有字符顺序执行(前提是没有其余参数)
作者: ligyste    时间: 2015-7-27 08:50

批处理for命令中的管道符为何要用尖号^进行转义?
DAIC 发表于 2015-7-25 21:27

谢谢,在18楼找到了答案
作者: ligyste    时间: 2015-7-27 08:50

楼主的问题描述得很清晰,这样的求助帖一般是容易赢得答复的

但我觉得楼主的理解能力,逻辑思维都并不差 ...
aa77dd@163.com 发表于 2015-7-25 19:12



    好的啊,到时去看看
作者: ligyste    时间: 2015-7-27 08:51

findstr "IP Address" 本身是一个不严谨的写法
它查找的是IP和Address这两个字符串,但是运气好,IPv4正好 ...
DAIC 发表于 2015-7-25 21:30


原来如此,谢谢指点
作者: ligyste    时间: 2015-7-27 08:52

这是一段在win7下取得桌面路径的代码,由于注册表的键值类型是reg_expand_sz,导出为文本文件后是十六进制代 ...
/zhqsystem/zhq 发表于 2015-7-25 23:13


是呢,使我疏忽,看少了前面成对出现的"




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2