Board logo

标题: [特效代码] (已解决)BAT代码是如何实现自身最小化的? [打印本页]

作者: lijinpengying    时间: 2013-1-30 23:36     标题: (已解决)BAT代码是如何实现自身最小化的?

本帖最后由 lijinpengying 于 2013-8-1 11:26 编辑

代码:
  1. %1 %2
  2. start /min /i "" "%~nx0" goto min&&goto :eof
  3. :min
  4. pause>nul
  5. exit
复制代码
求大侠们详细解说代码的意思。这里的%1 %2 为什么在写在开始的地方,为什么这样就能达到最小化的效果。
最好一句句的详细代码的作用!
小子百思不得其解,还忘各位不吝赐教,为我解惑。
作者: batman    时间: 2013-1-30 23:52

本帖最后由 batman 于 2013-1-31 00:02 编辑

这种思路确实是很奇妙的,分析如下:
代码的第二行实际为核心代码,用start /min(/i要不要都无所谓)最小化再次启动批处理自己,并把goto和min两个字符串做为参数1(%1)参数2(%2)传递给再次启动的批处理,最后退出本次批处理的运行(goto :eof),由于批处理在第二行就退出了,这一次下面的代码并不会被执行。当第二次启动批处理时,首先会读取上次运行所传来的%1 %2也就是goto min字符串(第一次运行时%1和%2均为空),这时cmd会判断定为goto min命令,从而直接跳转到标签min处(第二行代码就不会执行了)。总结要点如下:
1、双击运行后,批处理实际上被启动了两次
2、最小化运行是在第二次(所以总有个黑窗闪过)
3、第二次运行时巧妙运用了参数实现跳转
作者: lxzzr    时间: 2013-1-31 00:14

不错的思维。。。
作者: CrLf    时间: 2013-1-31 04:06

我更喜欢这样:
  1. @echo off
  2. %1 start /min /i "" %0 : %*
  3. shift
  4. pause
复制代码

作者: apang    时间: 2013-1-31 10:25

回复 4# CrLf

%*的作用是?
  1. @echo off
  2. %1 start /min /i "" %0 ::&shift&goto :eof
  3. pause
复制代码

作者: lijinpengying    时间: 2013-1-31 10:30

回复 2# batman


    谢谢大大
作者: lijinpengying    时间: 2013-1-31 10:31

谢谢各位,又学到了不少!
作者: CrLf    时间: 2013-2-1 00:46

回复 5# apang


    本来想保留参数的,但现在仔细一想,用这种写法实际上保留不了参数,也不允许存在参数,所以写成这样就行了:
  1. @echo off
  2. %1 start /min /i "" %0 :
  3. pause
复制代码





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