标题: [特效代码] (已解决)BAT代码是如何实现自身最小化的? [打印本页]
作者: lijinpengying 时间: 2013-1-30 23:36 标题: (已解决)BAT代码是如何实现自身最小化的?
本帖最后由 lijinpengying 于 2013-8-1 11:26 编辑
代码:- %1 %2
- start /min /i "" "%~nx0" goto min&&goto :eof
-
- :min
- pause>nul
- 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
我更喜欢这样:- @echo off
- %1 start /min /i "" %0 : %*
- shift
- pause
复制代码
作者: apang 时间: 2013-1-31 10:25
回复 4# CrLf
%*的作用是?- @echo off
- %1 start /min /i "" %0 ::&shift&goto :eof
- pause
复制代码
作者: lijinpengying 时间: 2013-1-31 10:30
回复 2# batman
谢谢大大
作者: lijinpengying 时间: 2013-1-31 10:31
谢谢各位,又学到了不少!
作者: CrLf 时间: 2013-2-1 00:46
回复 5# apang
本来想保留参数的,但现在仔细一想,用这种写法实际上保留不了参数,也不允许存在参数,所以写成这样就行了:- @echo off
- %1 start /min /i "" %0 :
- pause
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |