Board logo

标题: [数值计算] [已解决]求助批处理代码查错 [打印本页]

作者: 普大喜奔    时间: 2014-9-19 22:37     标题: [已解决]求助批处理代码查错

本帖最后由 pcl_test 于 2016-11-17 18:37 编辑

遇到非常诡异的问题 恳请高人解惑!
  1. ::记录写入文件的数目
  2. set num=0
  3. ::x值为0表示bak文件存在,y初值为0表示xls与bak无相同文件,y值为1表示有文件相同
  4. dir "%~dp0backup\*.bak" 1>nul 2>nul
  5. set x=!errorlevel!
  6. for /r %%a in (*.xls) do (
  7.   set y=0
  8.   if %x%==0 (
  9.    call :fileCompare "%%a"
  10.    if !y!==0 (
  11.      cscript //nologo main.vbs "%%a"
  12.      copy "%%a" "%~dp0backup\!date!-!time:~0,2!-!time:~3,2!-!time:~6,5!.bak" 1>nul 2>nul
  13.      set /a num+=1
  14.    )
  15.   )  else  (
  16.    cscript //nologo main.vbs "%%a"
  17.    copy "%%a" "%~dp0backup\!date!-!time:~0,2!-!time:~3,2!-!time:~6,5!.bak" 1>nul 2>nul
  18.    set /a num+=1
  19.    )
  20. )
  21. quit.vbs
  22. warn.vbs 3 !num!
  23. if !num!==0 exit 关键就是这句,在我另一个搜索word文件的几乎类似的脚本里这句一模一样,完全没有问题,在这用echo !num! 查看 ,发现值为0的时候不会退出 而是继续执行了
  24. echo 正在查重...
  25. cd. >TEMP
  26. set num=0
  27. for /f "eol=。 delims="  %%a in (DATA) do (
  28.   set var=%%a
  29. ::搜索以\结尾的字符串会导致异常,删除结尾的\
  30.   if !var:~-1!==\ set var=!var:~0,-1!
  31.   (findstr /l /c:"!var!" TEMP)>nul && set /a num+=1 && cls && echo 删除了 !num! 行重复内容 || echo %%a>>TEMP
  32. )
  33. del DATA 1>nul 2>nul
  34. ren TEMP DATA
  35. exit
  36. :fileCompare
  37.    for /f "delims=" %%b in ('dir /s /b "%~dp0backup\*.bak"') do (
  38.      fc /u "%~1" "%%b" 1>nul 2>nul
  39.      if !errorlevel!==0 (
  40.        set y=1
  41.        cls & echo "%~1" 内容已存在
  42.        goto end
  43.      )
  44.    )
  45.    :end
复制代码

作者: neorobin    时间: 2014-9-19 22:53

回复 1# 普大喜奔 你的代码中, 变量延迟扩展没打开
作者: 普大喜奔    时间: 2014-9-19 22:59

回复 2# neorobin
这是代码的上半部分
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. color 0f
  4. if not exist backup mkdir backup
  5. warn.vbs 2 0
  6. dir /s *.xls 1>nul 2>nul
  7. if !errorlevel!==0 goto start
  8. warn.vbs 1 0
  9. exit
  10. :start
  11. if not exist DATA cd. >DATA
  12. ::存放已写入行数,在main.vbs中读写
  13. echo 0 1>TEMP
复制代码
因为关系不大就没贴出来 刚才重启了一下电脑 问题依然存在 我真是被搞晕了!!!
作者: 普大喜奔    时间: 2014-9-19 23:01

可另一个脚本几乎一样的代码 只不过一个处理word一个是excel 不可思议的感觉
作者: 普大喜奔    时间: 2014-9-19 23:06

回复 2# neorobin
即使没打开延迟 echo !num! 回显是 0 那 if !num!==0 也应该成立才对呀
我在想是机子的问题吗?!可是另一个脚本这句是正常的呀!!搞的今晚都要睡不了觉了,呜呜。。。
作者: neorobin    时间: 2014-9-19 23:19

回复 5# 普大喜奔
  1. set num=0
复制代码
这句的问题
把末尾的空格去掉即可
最好用
  1. set “num=0”
复制代码
避免不可见的空白字符导致问题
作者: 普大喜奔    时间: 2014-9-19 23:20

回复 2# neorobin
用了间接变量总算正常了 可到底是为什么呢?我都快想疯了也搞不明白。。。
  1. set var=!num!
  2. if %var%==0 exit
复制代码

作者: 普大喜奔    时间: 2014-9-19 23:21

回复 6# neorobin
果然是的!!牛 感激啊 可以安心睡觉了 哈哈




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