先贴代码- @echo off
- setlocal enabledelayedexpansion
- color 0f
- if not exist backup mkdir backup
- warn.vbs 2 0
- for /r %%a in (*.doc) do (
- set var=%%a
- if defined var goto start
- )
- warn.vbs 1 0
- exit
-
- :start
- cd. >TEXT
- set "num=0"
- dir "%~dp0backup\*.bak" 1>nul 2>nul
- set x=!errorlevel!
- for /r %%a in (*.doc) do (
- set "y=0"
- if %x%==0 (
- call :fileCompare "%%a"
- if !y!==0 (
- cscript //nologo main.vbs "%%a"
- copy "%%a" "%~dp0backup\!date!-!time:~0,2!-!time:~3,2!-!time:~6,5!.bak" 1>nul 2>nul
- set /a num+=1
- cls & echo 已提取 !num! 个文本
- )
- ) else (
- cscript //nologo main.vbs "%%a"
- copy "%%a" "%~dp0backup\!date!-!time:~0,2!-!time:~3,2!-!time:~6,5!.bak" 1>nul 2>nul
- set /a num+=1
- cls & echo 已提取 !num! 个文本
- )
- )
- quit.vbs
- ::warn.vbs会弹出一个msgbox并显示含有num的值的文本
- warn.vbs 3 !num!
- 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,代码恢复了原貌,运行却仍然正常,难道代码还会玩情绪不成!?
为了搞个明白,我重启电脑后,把原先在其他目录的脚本又复制了一份到根目录,再次运行,问题再次出现了!!的确有问题
无奈之中,我把上面代码最后两句调换位置,权且试试看,结果一次成功!
问题是解决了,可是心里的问号去不掉,哪位还遇到过类似状况,好让俺整个明白呗 |