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

[已解决]变量延迟扩展for语句怎样在内嵌中引用变量?

[复制链接]
发表于 2011-3-10 20:54:10 | 显示全部楼层 |阅读模式
我用下面这段查看屏幕分辨率:
  1. setlocal enabledelayedexpansion
  2. for /f "skip=1 tokens=*" %%k in ('wmic DESKTOPMONITOR get ScreenWidth^|findstr /i "."') do (
  3. set w=%%k
  4. for /f "skip=1 tokens=*" %%k in ('wmic DESKTOPMONITOR get ScreenHeight^|findstr /i "."') do (
  5. echo 分辨率:!w! X %%k
  6. )
  7. )
  8. setlocal disabledelayedexpansion
复制代码
可是显示结果:

X 1024

就是ScreenWidth的值没显示出来。。我想一定是内嵌FOR中!w!出问题了。。写法或者不正确。。但是奈何水平低。。不知道怎么改。。希望哪位好心人帮忙解释一下下。。谢谢

[ 本帖最后由 abcdshenji 于 2011-3-13 14:29 编辑 ]

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-3-10 21:21:50 | 显示全部楼层
这样应该行吧?
  1. @echo  off
  2. for /f "skip=1" %%k in ('wmic DESKTOPMONITOR get ScreenWidth^|findstr /i "."') do set "w=%%k"
  3. for /f "skip=1" %%i in ('wmic DESKTOPMONITOR get ScreenHeight^|findstr /i "."') do set "h=%%i"
  4. echo 分辨率:%w%*%h%
  5. pause>nul
复制代码
 楼主| 发表于 2011-3-10 21:31:05 | 显示全部楼层

回复 2楼 的帖子

恩。我知道这样可以。。但是我更想知道我上面写的错在什么地方。。这样更能促进我这样的新人的进步啊不是吗。。能劳烦再思考一下吗?。。万分感谢
发表于 2011-3-10 22:17:02 | 显示全部楼层
.         
@echo off
::setlocal enabledelayedexpansion
for /f "skip=1 tokens=*" %%i in ('wmic DESKTOPMONITOR get ScreenWidth^|findstr /i "."') do (
set
w=%%i
for /f "skip=1 tokens=*" %%k in ('wmic DESKTOPMONITOR get ScreenHeight^|findstr /i "."') do (
set
h=%%k
   )
          )
set w=%w: =%
set h=%h: =%
echo 分辨率是:%w%*%h%
pause



[ 本帖最后由 haiou327 于 2011-3-10 22:18 编辑 ]
发表于 2011-3-10 22:19:04 | 显示全部楼层
把  "skip=1 tokens=*"   改成 "skip=1 tokens=1"  就可以了

原因是你原来的 %%k 的值含有换行符所造成的。运行下面的代码看看就明白了
  1. @echo off&setlocal enabledelayedexpansion

  2. for /f "skip=1 tokens=*" %%k in ('wmic DESKTOPMONITOR get ScreenWidth^|findstr /i "."') do (
  3. set w=%%k
  4. echo;"%%k">aaa.tmp
  5. for /f "skip=1 tokens=*" %%k in ('wmic DESKTOPMONITOR get ScreenHeight^|findstr /i "."') do (
  6. echo 分辨率:!w! X %%k
  7. )
  8. )
  9. setlocal disabledelayedexpansion

  10. notepad aaa.tmp
复制代码

评分

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

查看全部评分

发表于 2011-3-10 22:21:26 | 显示全部楼层
一不要嵌套,二不要开启变量延迟。。。
发表于 2011-3-10 22:24:49 | 显示全部楼层
..............
.
@echo off
setlocal enabledelayedexpansion
for /f "skip=1 tokens=1" %%i in ('wmic DESKTOPMONITOR get ScreenWidth^|findstr /i "."') do (
set
w=%%i
for /f "skip=1 tokens=1" %%k in ('wmic DESKTOPMONITOR get ScreenHeight^|findstr /i "."') do (
set
h=%%k
   )
          )
echo 分辨率是:!w!*!h!
pause

评分

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

查看全部评分

 楼主| 发表于 2011-3-10 23:03:08 | 显示全部楼层

回复 5楼 的帖子

恩确实是这样的。。我明白了。。是我太粗心了。。谢谢。。也谢谢haiou327大哥
发表于 2011-3-12 14:51:12 | 显示全部楼层
  1. for /f "tokens=1,2" %%a in ('wmic DESKTOPMONITOR get ScreenWidth,screenheight^|findstr "[0-9]"') do echo %%a X %%b
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-16 21:59 , Processed in 0.028487 second(s), 12 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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