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

8# ArdentMan


用文件大小来判断,用途比较单一,万一文本有bom呢?比如utf-8

TOP

本帖最后由 zm900612 于 2011-7-12 19:11 编辑

10# q115643492

碰到莫名其妙错误时,我常常用以下几种方法差错:
  1. 错误退出时,改用 cmd /k 启动 bat ,碰到错误退出的情况时不会完全退出 cmd
  2. 怀疑某些部分未执行或者结果异常时,在关键的节点开回显、下断点、输出到文件、单步执行
  3. 代码的任何地方都有可能是错误源、不知道具体哪个部分出错时,可以用折半法或者每隔 N 行标记一个 cmd /q /v:on 和 pause ,逐段检查
  4. 找到了出问题的命令,但是出错原因却匪夷所思时,木油办法了,要么摆渡股沟,要么咨询别人,要么自己瞎蒙吧...
复制代码
比如楼主这个刚运行时就退出了,用 cmd /k 执行发现错在 in(,加上分隔符后仍然出错,于是扔个 echo !w!&pause 到 for 中单步执行,发现是空循环,症结就找到了...
  1. @echo off&setlocal enabledelayedexpansion
  2. %1 cmd /k %0 ::
  3. ::改用 cmd /k 启动自身
  4. for /f %%a in(1.txt) do (
  5.    set w=%%a
  6.    echo !w!&pause
  7.    rem 单步执行
  8.    if defined w (echo !w!) else (echo 无字符)
  9. )
  10. pause>nul
复制代码
不知道大家怎么查错的,有木有人交流下?

TOP

本帖最后由 zm900612 于 2011-7-13 16:27 编辑

12# Hello123World

流程如下:
  1. rem 双击 1.bat
  2. @cmd /c "%1" %*
  3. rem 默认情况下以 cmd /c 执行 bat 脚本,由于是双击运行,所以 %* 为空
  4. @echo off
  5. rem 脚本中的第一行,关闭回显
  6. %1 cmd /k %0 ::
  7. rem %1 为空,所以执行了 cmd /k 1.bat ::,开启一个新的 cmd 来执行自身,注意此时 %1 的值变为 :: 了
  8. @echo off
  9. rem 因为是在新的 cmd 中,所以又从头执行一遍,第二次执行脚本的第一行,关闭回显。
  10. %1 cmd /k %0 ::
  11. rem 此时 %1 等于 ::,所以 cmd 把这行理解成注释而跳过,从而在脚本内部完成了从 cmd /c 到 cmd /k 的切换。
复制代码

TOP

返回列表