Board logo

标题: [网络连接] [已解决]批处理怎样获取ipconfig命令语句的返回结果? [打印本页]

作者: zc584267913    时间: 2010-5-19 11:27     标题: [已解决]批处理怎样获取ipconfig命令语句的返回结果?

本帖最后由 pcl_test 于 2016-8-14 20:49 编辑

@echo off&setlocal enableextensions
for /f "tokens=3*" %%i in ('ipconfig^|find /i "Ethernet adapter"') do set/a bb+=1&call set zc_%%bb%%=%%i&set zc_

请问为什么一定要用call set才能获取正确的值?而无法使用延迟变量来获取?

[ 本帖最后由 zc584267913 于 2010-5-19 14:30 编辑 ]
作者: hanyeguxing    时间: 2010-5-19 12:34

原帖由 zc584267913 于 2010-5-19 11:27 发表
@echo off&setlocal enableextensions
for /f "tokens=3*" %%i in ('ipconfig^|find /i "Ethernet adapter"') do set/a bb+=1&call set zc_%%bb%%=%%i&set zc_

请问为什么一定要用call set才能获取正确的值?而无法使用延迟变量来获取?
1,可以使用变量延迟
2,你的脚本错误在于setlocal enabledelayedexpansion打错了。
正确写法:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=3*" %%i in ('ipconfig^|find /i "Ethernet adapter"') do set/a bb+=1&set zc_!bb!=%%i
  3. set zc_
  4. pause
复制代码
或:
  1. @echo off
  2. for /f "tokens=3*" %%i in ('ipconfig^|find /i "Ethernet adapter"') do set/a bb+=1&call set zc_%%bb%%=%%i
  3. set zc_
  4. pause
复制代码
set zc_不要和for在一行,如果想要放一行,需要这样写:
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "tokens=3*" %%i in ('ipconfig^|find /i "Ethernet adapter"') do set/a bb+=1&set zc_!bb!=%%i)&set zc_
  3. pause
复制代码
或:
  1. @echo off
  2. (for /f "tokens=3*" %%i in ('ipconfig^|find /i "Ethernet adapter"') do set/a bb+=1&call set zc_%%bb%%=%%i)&set zc_
  3. pause
复制代码

[ 本帖最后由 hanyeguxing 于 2010-5-19 12:38 编辑 ]
作者: sgaizxt001    时间: 2010-5-19 20:49

setlocal enableextensions的写法有什么不同吗?我看别人的代码有这样写的。比如:
  1. @echo off & setlocal ENABLEEXTENSIONS
  2. set "first="
  3. for /f "delims=" %%a in ('more ^< numbers.txt') do (
  4.   if not defined first set first=%%a
  5. )
  6. echo/%first%
复制代码

作者: hanyeguxing    时间: 2010-5-19 21:12

setlocal enableextensions是启用命令扩展
setlocal enabledelayedexpansion是启用变量延迟
作者: sgaizxt001    时间: 2010-5-19 21:38

我去看看命令扩展是什么意思




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