标题: [其他] [已解决]xp下使用ipconfig获取ip地址赋值给变量出现部分内容消失/前置是什么原因 [打印本页]
作者: slovent 时间: 2016-10-8 23:40 标题: [已解决]xp下使用ipconfig获取ip地址赋值给变量出现部分内容消失/前置是什么原因
本帖最后由 pcl_test 于 2016-10-9 10:01 编辑
xp系统下,批处理变量赋值不正确的奇怪问题求教
各位老师,我在win8下写了一个简单的批处理,如下:- echo hello winxp
- setlocal enabledelayedexpansion
-
- for /f "tokens=2 delims=:" %%i in ('ipconfig /all ^| find /i "IP Address"') do (
-
- set ipAddress=%%i
- set ipAddress=!ipAddress:~1!
-
- if "!ipAddress:192.168.2.=!" neq "!ipAddress!" (
- set nowIpAddrFile=Result\!ipAddress!.txt
- echo !nowIpAddrFile!
- set nowHtmlIpAddrFile=Result\!ipAddress!.html
- set nowIpAddr=!ipAddress!
- )
- )
复制代码
这段代码在win8下都是正确的,ipconfig那边有点改动,否则取不到ip地址的值。
echo !nowIpAddrFile! 这个变量的时候,我应该需要的是类似这样的值 Result\192.168.2.11.txt,但是实际情况xp的cmd窗口却抛给我一个这样的值:.txtlt\\192.168.2.11。
求老师解答,我是哪里出了问题呢?
作者: aa77dd@163.com 时间: 2016-10-8 23:58
本帖最后由 aa77dd@163.com 于 2016-10-9 00:06 编辑
回复 1# slovent
第 6 行改一下试试
输出中有一个特殊字符要过滤掉- for /f delims^= %%i in ("%%i") do set "ipAddress=%%i"
复制代码
作者: slovent 时间: 2016-10-9 00:01
回复 2# aa77dd@163.com
擦 又是您啊,aa77dd@163.com老师,这么晚了 真不好意思!- echo hello winxp
- setlocal enabledelayedexpansion
-
- for /f "tokens=2 delims=:" %%i in ('ipconfig /all ^| find /i "IP Address"') do (
-
- for %%i in ("%%i") set "ipAddress=%%~i"
- set ipAddress=!ipAddress:~1!
-
- if "!ipAddress:192.168.2.=!" neq "!ipAddress!" (
- set nowIpAddrFile=Result\!ipAddress!.txt
- echo !nowIpAddrFile!
- set nowHtmlIpAddrFile=Result\!ipAddress!.html
- set nowIpAddr=!ipAddress!
- )
- )
复制代码
是改成上面的这个样子吗,好像不行,运行一闪而过,应该是语法问题。
作者: slovent 时间: 2016-10-9 00:07
for %%i in ("%%i") do set "ipAddress=%%~i"
改过了,但是还是输出一样的变量值,依然不对,好奇怪 好奇怪
作者: aa77dd@163.com 时间: 2016-10-9 00:07
回复 3# slovent - for /f delims^= %%i in ("%%i") do set "ipAddress=%%i"
复制代码
你加上pause 调试下
作者: slovent 时间: 2016-10-9 00:08
回复 2# aa77dd@163.com
搞定了!!!! aa77dd@163.com老师,您是全能的啊,请问,这是为什么呢???没搞懂啊!!
作者: slovent 时间: 2016-10-9 00:13
回复 5# aa77dd@163.com
aa77dd老师,问个题外的问题哈,- if "!ipAddress:192.168.2.=!" neq "!ipAddress!" (
复制代码
这段代码中的ip地址,我可以用变量吗?比如如下:- set ip=192.168.1.
- if "!ipAddress:!ip!=!" neq "!ipAddress!" (
- set nowIpAddrFile=Result\!ipAddress!.txt
- echo !nowIpAddrFile!
- set nowHtmlIpAddrFile=Result\!ipAddress!.html
- set nowIpAddr=!ipAddress!
- )
复制代码
作者: codegay 时间: 2016-10-9 00:14
回复 6# slovent
→_→ 聪明勤奋智商高
作者: aa77dd@163.com 时间: 2016-10-9 00:20
- echo hello winxp
- setlocal enabledelayedexpansion
- echo off
- >nul chcp 437 & rem 437 代码页 保证输出形式为 IP Address 而不包含汉字
-
- for /f "tokens=3-6 delims=.: " %%a in ('ipconfig /all ^| find /i "IP Address"') do (
-
- if "%%a.%%b.%%c"=="192.168.2" (
-
- REM 清除 XP 环境下输出的特殊字符
- for /f delims^= %%f in ("%%a.%%b.%%c.%%d") do (
- set "ipAddress=%%f"
- )
-
- set nowIpAddrFile=Result\!ipAddress!.txt
- echo !nowIpAddrFile!
- set nowHtmlIpAddrFile=Result\!ipAddress!.html
- set nowIpAddr=!ipAddress!
- )
- )
-
- pause
复制代码
作者: slovent 时间: 2016-10-9 00:23
回复 9# aa77dd@163.com
就是这段代码了,强!!!
作者: aa77dd@163.com 时间: 2016-10-9 00:24
!var1!var2!...! 这种形式用不了
!var1%var2%! 这种形式可用, 但 var2 在运行时变更后, 不能更新值
!var1%%x! 这种可用, %%x 是 for 的变量, 运行时更新有效
作者: slovent 时间: 2016-10-9 00:28
回复 11# aa77dd@163.com
嗯嗯,又学到了新知识,谢谢老师!!!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |