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

[其他] 批处理延迟变量在根目录下的奇怪的现象

先贴代码
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. color 0f
  4. if not exist backup mkdir backup
  5. warn.vbs 2 0
  6. for /r %%a in (*.doc) do (
  7.   set var=%%a
  8.   if defined var goto start
  9. )
  10. warn.vbs 1 0
  11. exit
  12. :start
  13. cd. >TEXT
  14. set "num=0"
  15. dir "%~dp0backup\*.bak" 1>nul 2>nul
  16. set x=!errorlevel!
  17. for /r %%a in (*.doc) do (
  18.   set "y=0"
  19.   if %x%==0 (
  20.    call :fileCompare "%%a"
  21.    if !y!==0 (
  22.      cscript //nologo main.vbs "%%a"
  23.      copy "%%a" "%~dp0backup\!date!-!time:~0,2!-!time:~3,2!-!time:~6,5!.bak" 1>nul 2>nul
  24.      set /a num+=1
  25.      cls & echo 已提取 !num! 个文本
  26.    )
  27.   )  else  (
  28.    cscript //nologo main.vbs "%%a"
  29.    copy "%%a" "%~dp0backup\!date!-!time:~0,2!-!time:~3,2!-!time:~6,5!.bak" 1>nul 2>nul
  30.    set /a num+=1
  31.    cls & echo 已提取 !num! 个文本
  32.    )
  33. )
  34. quit.vbs
  35. ::warn.vbs会弹出一个msgbox并显示含有num的值的文本
  36. warn.vbs 3 !num!
  37. if !num!==0 del TEXT 1>nul 2>nul && exit
复制代码
......后面还有一大段没什么关系就不贴了
这段代码的功能是遍历当前和子目录复制符合条件的doc后缀的文件并进行处理,如果没有文件被处理就退出,有则继续往下运行
之前一直运行的好好的,直到把它转移到根目录下运行后发现奇怪的现象:msgbox已经显示num的值是比如29,但脚本运行到下一句还是退出了,好像if判断没起作用一样
然后我在if语句前加了echo !num!和pause,运行的环境和刚才一样都没变,这次msgbox告诉我num仍然是29,echo回显也是29,诡异的是,它竟然开始往下运行了!
更加诡异的是,去掉后加的echo 和pause,代码恢复了原貌,运行却仍然正常,难道代码还会玩情绪不成!?
为了搞个明白,我重启电脑后,把原先在其他目录的脚本又复制了一份到根目录,再次运行,问题再次出现了!!的确有问题
无奈之中,我把上面代码最后两句调换位置,权且试试看,结果一次成功!
问题是解决了,可是心里的问号去不掉,哪位还遇到过类似状况,好让俺整个明白呗
!scripting!

返回列表