Board logo

标题: [文本处理] [已解决]BAT批处理为何不能调用if判断语句里的数值? [打印本页]

作者: iq301    时间: 2014-6-18 22:01     标题: [已解决]BAT批处理为何不能调用if判断语句里的数值?

本帖最后由 iq301 于 2014-6-22 18:22 编辑

以下代码,是我用时间去判断,找出Jun 18这天所有的文件名%%c,然后把%%c的值通过echo的形式指向到vms.txt里,为什么就不能输出ab的动态值呢?麻烦帮忙看下,错在哪里?谢谢

11.txt里面的内容:
-rw-rw-r--   1 om       trmgroup   17290 Jun  7 07:10 005_158_HOST_MSU1111.CL
-rw-rw-r--   1 om       trmgroup   30030 Jun  8 07:10 005_159_HOST_MSU1111.CL
-rw-rw-r--   1 om       trmgroup   22386 Jun  9 07:10 005_160_HOST_MSU1111.CL
-rw-rw-r--   1 om       trmgroup   24024 Jun 11 07:10 005_162_HOST_MSU1111.CL
-rw-rw-r--   1 om       trmgroup   27664 Jun 12 07:10 005_163_HOST_MSU1111.CL
-rw-rw-r--   1 om       trmgroup  159068 Jun 13 11:10 005_164_HOST_MSU1111.CL
-rw-rw-r--   1 om       trmgroup   28210 Jun 18 07:10 005_165_HOST_MSU1111.CL
-rw-rw-r--   1 om       trmgroup   29302 Jun 18 07:10 005_166_HOST_MSU1111.CL
-rw-rw-r--   1 om       trmgroup   32760 Jun 18 07:10 005_167_HOST_MSU1111.CL
-rw-rw-r--   1 om       trmgroup   24206 Jun 18 07:10 005_168_HOST_MSU1111.CL
-rw-rw-r--   1 om       trmgroup   38766 May 30 08:10 006_150_HOST_MSU1111.CL
-rw-rw-r--   1 om       trmgroup  112476 May 31 10:10 006_151_HOST_MSU1111.CL
  1. @echo off&SETLOCAL ENABLEEXTENSIONS
  2. del g:\bat\test\a.txt
  3. set ddd=%date:~0,4%%date:~5,2%%date:~8,2%
  4. set mm=%date:~5,2%
  5. set dd=%date:~8,2%
  6. if %mm%==01 (set aa=Jan)
  7. if %mm%==02 (set aa=Feb)
  8. if %mm%==03 (set aa=Mar)
  9. if %mm%==04 (set aa=Apr)
  10. if %mm%==05 (set aa=May)
  11. if %mm%==06 (set aa=Jun)
  12. if %mm%==07 (set aa=Jul)
  13. if %mm%==08 (set aa=Aug)
  14. if %mm%==09 (set aa=Sep)
  15. if %mm%==10 (set aa=Oct)
  16. if %mm%==11 (set aa=Nov)
  17. if %mm%==12 (set aa=Dec)
  18. for /f "tokens=6,7,9 delims= " %%a in (g:\bat\test\11.txt) do (
  19. IF %%a EQU %aa% IF %%b EQU %dd% (
  20. set ab=%%c
  21. )
  22. )  
  23. echo open 192.168.10.20  >g:\bat\test\vms.txt
  24. echo user abc abc123  >>g:\bat\test\vms.txt
  25. echo bin                      >>g:\bat\test\vms.txt
  26. echo cd /usr/trm/data/host     >>g:\bat\test\vms.txt
  27. echo lcd c:\users\a\b\c >>g:\bat\test\vms.txt
  28. echo get !ab! >>g:\bat\test\vms.txt
  29. echo bye >>g:\bat\test\vms.txt
  30. endlocal
复制代码
最终想要的结果是:

open 192.168.10.20  
user abc abc123  
bin                     
cd /usr/trm/data/host     
lcd c:\users\a\b\c
get 005_165_HOST_MSU1111.CL
get 005_166_HOST_MSU1111.CL
get 005_167_HOST_MSU1111.CL
get 005_168_HOST_MSU1111.CL
bye
作者: Batcher    时间: 2014-6-18 22:05

开启变量延迟扩展的命令是:
setlocal enabledelayedexpansion

而不是:
SETLOCAL ENABLEEXTENSIONS
作者: iq301    时间: 2014-6-18 22:10

回复 2# Batcher


    。。。。。。。。。。。。。无语了。你看下我后面echo 下调用ab值对吗,能不能输出动态的ab值?
作者: Batcher    时间: 2014-6-18 22:30

回复 3# iq301


    在没有正确开启变量延迟扩展的情况下,是不能使用 !ab!  这种格式的。
作者: iq301    时间: 2014-6-18 22:46

检查后代码对了,可是我调用的值只能取到ab的最后的值。不能取动态的所有ab值。
作者: Batcher    时间: 2014-6-18 23:06

回复 5# iq301


    你把它放到了for循环外面,当然无法取到所有值了。
作者: PowerShell    时间: 2014-6-18 23:25

手机相机之类,一般有两种管理方法,usb调试和usb-store,
你用 usb-store 模式,产生了盘符,这道题,用脚本,处理起来就简单多了。
作者: Batcher    时间: 2014-6-18 23:32

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set mm=%date:~5,2%
  4. set dd=%date:~8,2%
  5. set /a dd=1%dd% %% 100
  6. if %mm%==01 (
  7.     set aa=Jan
  8. ) else if %mm%==02 (
  9.     set aa=Feb
  10. ) else if %mm%==03 (
  11.     set aa=Mar
  12. ) else if %mm%==04 (
  13.     set aa=Apr
  14. ) else if %mm%==05 (
  15.     set aa=May
  16. ) else if %mm%==06 (
  17.     set aa=Jun
  18. ) else if %mm%==07 (
  19.     set aa=Jul
  20. ) else if %mm%==08 (
  21.     set aa=Aug
  22. ) else if %mm%==09 (
  23.     set aa=Sep
  24. ) else if %mm%==10 (
  25.     set aa=Oct
  26. ) else if %mm%==11 (
  27.     set aa=Nov
  28. ) else if %mm%==12 (
  29.     set aa=Dec
  30. )
  31. >g:\bat\test\vms.txt  echo open 192.168.10.20
  32. >>g:\bat\test\vms.txt echo user abc abc123
  33. >>g:\bat\test\vms.txt echo bin
  34. >>g:\bat\test\vms.txt echo cd /usr/trm/data/host
  35. >>g:\bat\test\vms.txt echo lcd c:\users\a\b\c
  36. for /f "tokens=6,7,9" %%a in (g:\bat\test\11.txt) do (
  37.     if %%a equ %aa% (
  38.         if %%b equ %dd% (
  39.             >>g:\bat\test\vms.txt echo get %%c
  40.         )
  41.     )
  42. )  
  43. >>g:\bat\test\vms.txt echo bye
复制代码

作者: apang    时间: 2014-6-19 00:11

  1. @echo off & setlocal enabledelayedexpansion
  2. set /a m=(1%date:~5,2%-101)*3, d=1%date:~8,2%-100
  3. set "s=JanFebMarAprMayJunJulAugSepOctNovDec"
  4. pushd "g:\bat\test\"
  5. (
  6.     echo,open 192.168.10.20
  7.     echo,user abc abc123
  8.     echo,bin
  9.     echo,cd /usr/trm/data/host   
  10.     echo,lcd c:\users\a\b\c
  11.     for /f "tokens=6,7,9" %%a in (11.txt) do (
  12.         if /i "%%a"=="!s:~%m%,3!"  if "%%b"=="%d%" echo,get %%c
  13.     )
  14.     echo,bye
  15. )>vms.txt
  16. pause
复制代码

作者: iq301    时间: 2014-6-19 00:40

谢谢各位,问题解决了,两个都可以。




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