找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27160|回复: 11

[其他] [已解决]xp下使用ipconfig获取ip地址赋值给变量出现部分内容消失/前置是什么原因

[复制链接]
发表于 2016-10-8 23:40:45 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-10-9 10:01 编辑

xp系统下,批处理变量赋值不正确的奇怪问题求教
各位老师,我在win8下写了一个简单的批处理,如下:

  1. echo hello winxp
  2. setlocal enabledelayedexpansion

  3. for /f "tokens=2 delims=:" %%i in ('ipconfig /all ^| find /i "IP Address"') do (
  4.        
  5.         set ipAddress=%%i
  6.         set ipAddress=!ipAddress:~1!
  7.        
  8.         if "!ipAddress:192.168.2.=!" neq "!ipAddress!" (
  9.                 set nowIpAddrFile=Result\!ipAddress!.txt
  10.                 echo !nowIpAddrFile!
  11.                 set nowHtmlIpAddrFile=Result\!ipAddress!.html
  12.                 set nowIpAddr=!ipAddress!
  13.         )
  14. )

复制代码
这段代码在win8下都是正确的,ipconfig那边有点改动,否则取不到ip地址的值。
echo !nowIpAddrFile! 这个变量的时候,我应该需要的是类似这样的值 Result\192.168.2.11.txt,但是实际情况xp的cmd窗口却抛给我一个这样的值:.txtlt\\192.168.2.11
求老师解答,我是哪里出了问题呢?

评分

参与人数 2PB -2 收起 理由
pcl_test -4 勿发笼统无意义的标题
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2016-10-8 23:58:01 | 显示全部楼层
本帖最后由 aa77dd@163.com 于 2016-10-9 00:06 编辑

回复 1# slovent

第 6 行改一下试试

输出中有一个特殊字符要过滤掉
  1. for /f delims^= %%i in ("%%i") do set "ipAddress=%%i"
复制代码
 楼主| 发表于 2016-10-9 00:01:53 | 显示全部楼层
回复 2# aa77dd@163.com

擦 又是您啊,aa77dd@163.com老师,这么晚了 真不好意思!


  1. echo hello winxp
  2. setlocal enabledelayedexpansion

  3. for /f "tokens=2 delims=:" %%i in ('ipconfig /all ^| find /i "IP Address"') do (
  4.        
  5.         for %%i in ("%%i") set "ipAddress=%%~i"
  6.         set ipAddress=!ipAddress:~1!
  7.        
  8.         if "!ipAddress:192.168.2.=!" neq "!ipAddress!" (
  9.                 set nowIpAddrFile=Result\!ipAddress!.txt
  10.                 echo !nowIpAddrFile!
  11.                 set nowHtmlIpAddrFile=Result\!ipAddress!.html
  12.                 set nowIpAddr=!ipAddress!
  13.         )
  14. )
复制代码
是改成上面的这个样子吗,好像不行,运行一闪而过,应该是语法问题。
 楼主| 发表于 2016-10-9 00:07:24 | 显示全部楼层
for %%i in ("%%i") do set "ipAddress=%%~i"

改过了,但是还是输出一样的变量值,依然不对,好奇怪 好奇怪
发表于 2016-10-9 00:07:54 | 显示全部楼层
回复 3# slovent
  1. for /f delims^= %%i in ("%%i") do set "ipAddress=%%i"
复制代码
你加上pause 调试下
 楼主| 发表于 2016-10-9 00:08:57 | 显示全部楼层
回复 2# aa77dd@163.com


搞定了!!!! aa77dd@163.com老师,您是全能的啊,请问,这是为什么呢???没搞懂啊!!
 楼主| 发表于 2016-10-9 00:13:59 | 显示全部楼层
回复 5# aa77dd@163.com

aa77dd老师,问个题外的问题哈,
  1. if "!ipAddress:192.168.2.=!" neq "!ipAddress!" (
复制代码
这段代码中的ip地址,我可以用变量吗?比如如下:
  1.         set ip=192.168.1.
  2.         if "!ipAddress:!ip!=!" neq "!ipAddress!" (
  3.                 set nowIpAddrFile=Result\!ipAddress!.txt
  4.                 echo !nowIpAddrFile!
  5.                 set nowHtmlIpAddrFile=Result\!ipAddress!.html
  6.                 set nowIpAddr=!ipAddress!
  7.         )
复制代码
发表于 2016-10-9 00:14:41 | 显示全部楼层
回复 6# slovent


   →_→ 聪明勤奋智商高
发表于 2016-10-9 00:20:14 | 显示全部楼层
  1. echo hello winxp
  2. setlocal enabledelayedexpansion
  3. echo off
  4. >nul chcp 437 & rem 437 代码页 保证输出形式为 IP Address 而不包含汉字

  5. for /f "tokens=3-6 delims=.: " %%a in ('ipconfig /all ^| find /i "IP Address"') do (

  6.     if "%%a.%%b.%%c"=="192.168.2" (

  7.         REM 清除 XP 环境下输出的特殊字符
  8.         for /f delims^= %%f in ("%%a.%%b.%%c.%%d") do (
  9.             set "ipAddress=%%f"
  10.         )

  11.         set nowIpAddrFile=Result\!ipAddress!.txt
  12.         echo !nowIpAddrFile!
  13.         set nowHtmlIpAddrFile=Result\!ipAddress!.html
  14.         set nowIpAddr=!ipAddress!
  15.     )
  16. )

  17. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2016-10-9 00:23:05 | 显示全部楼层
回复 9# aa77dd@163.com


就是这段代码了,强!!!
发表于 2016-10-9 00:24:46 | 显示全部楼层
!var1!var2!...! 这种形式用不了

!var1%var2%! 这种形式可用, 但 var2 在运行时变更后, 不能更新值

!var1%%x!  这种可用, %%x 是 for  的变量, 运行时更新有效
 楼主| 发表于 2016-10-9 00:28:59 | 显示全部楼层
回复 11# aa77dd@163.com

嗯嗯,又学到了新知识,谢谢老师!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:32 , Processed in 0.022768 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表