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

[文本处理] [已解决]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
1

评分人数

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

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

而不是:
SETLOCAL ENABLEEXTENSIONS
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# Batcher


    。。。。。。。。。。。。。无语了。你看下我后面echo 下调用ab值对吗,能不能输出动态的ab值?

TOP

回复 3# iq301


    在没有正确开启变量延迟扩展的情况下,是不能使用 !ab!  这种格式的。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

检查后代码对了,可是我调用的值只能取到ab的最后的值。不能取动态的所有ab值。

TOP

回复 5# iq301


    你把它放到了for循环外面,当然无法取到所有值了。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

手机相机之类,一般有两种管理方法,usb调试和usb-store,
你用 usb-store 模式,产生了盘符,这道题,用脚本,处理起来就简单多了。
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

  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
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  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
复制代码
1

评分人数

TOP

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

TOP

返回列表