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

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

我用下面这段查看屏幕分辨率:
  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 编辑 ]
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

这样应该行吧?
  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
复制代码
看得多说得多,远比不上写得多。

TOP

回复 2楼 的帖子

恩。我知道这样可以。。但是我更想知道我上面写的错在什么地方。。这样更能促进我这样的新人的进步啊不是吗。。能劳烦再思考一下吗?。。万分感谢

TOP

.         
@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 编辑 ]

TOP

把  "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

评分人数

TOP

一不要嵌套,二不要开启变量延迟。。。
***共同提高***

TOP

..............
.
@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

评分人数

TOP

回复 5楼 的帖子

恩确实是这样的。。我明白了。。是我太粗心了。。谢谢。。也谢谢haiou327大哥

TOP

  1. for /f "tokens=1,2" %%a in ('wmic DESKTOPMONITOR get ScreenWidth,screenheight^|findstr "[0-9]"') do echo %%a X %%b
复制代码

TOP

返回列表