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

[特效代码] (已解决)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-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、第二次运行时巧妙运用了参数实现跳转
1

评分人数

***共同提高***

TOP

不错的思维。。。

TOP

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

评分人数

TOP

回复 4# CrLf

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

TOP

回复 2# batman


    谢谢大大

TOP

谢谢各位,又学到了不少!

TOP

回复 5# apang


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

TOP

返回列表