[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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. set ipAddress=%%i
  5. set ipAddress=!ipAddress:~1!
  6. if "!ipAddress:192.168.2.=!" neq "!ipAddress!" (
  7. set nowIpAddrFile=Result\!ipAddress!.txt
  8. echo !nowIpAddrFile!
  9. set nowHtmlIpAddrFile=Result\!ipAddress!.html
  10. set nowIpAddr=!ipAddress!
  11. )
  12. )
复制代码
这段代码在win8下都是正确的,ipconfig那边有点改动,否则取不到ip地址的值。
echo !nowIpAddrFile! 这个变量的时候,我应该需要的是类似这样的值 Result\192.168.2.11.txt,但是实际情况xp的cmd窗口却抛给我一个这样的值:.txtlt\\192.168.2.11
求老师解答,我是哪里出了问题呢?
2

评分人数

    • pcl_test: 勿发笼统无意义的标题PB -4
    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 aa77dd@163.com 于 2016-10-9 00:06 编辑

回复 1# slovent

第 6 行改一下试试

输出中有一个特殊字符要过滤掉
  1. for /f delims^= %%i in ("%%i") do set "ipAddress=%%i"
复制代码

TOP

回复 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. for %%i in ("%%i") set "ipAddress=%%~i"
  5. set ipAddress=!ipAddress:~1!
  6. if "!ipAddress:192.168.2.=!" neq "!ipAddress!" (
  7. set nowIpAddrFile=Result\!ipAddress!.txt
  8. echo !nowIpAddrFile!
  9. set nowHtmlIpAddrFile=Result\!ipAddress!.html
  10. set nowIpAddr=!ipAddress!
  11. )
  12. )
复制代码
是改成上面的这个样子吗,好像不行,运行一闪而过,应该是语法问题。

TOP

for %%i in ("%%i") do set "ipAddress=%%~i"

改过了,但是还是输出一样的变量值,依然不对,好奇怪 好奇怪

TOP

回复 3# slovent
  1. for /f delims^= %%i in ("%%i") do set "ipAddress=%%i"
复制代码
你加上pause 调试下

TOP

回复 2# aa77dd@163.com


搞定了!!!! aa77dd@163.com老师,您是全能的啊,请问,这是为什么呢???没搞懂啊!!

TOP

回复 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. )
复制代码

TOP

回复 6# slovent


   →_→ 聪明勤奋智商高
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

  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

评分人数

TOP

回复 9# aa77dd@163.com


就是这段代码了,强!!!

TOP

!var1!var2!...! 这种形式用不了

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

!var1%%x!  这种可用, %%x 是 for  的变量, 运行时更新有效

TOP

回复 11# aa77dd@163.com

嗯嗯,又学到了新知识,谢谢老师!!!

TOP

返回列表