找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 29381|回复: 7

[特效代码] (已解决)BAT代码是如何实现自身最小化的?

[复制链接]
发表于 2013-1-30 23:36:17 | 显示全部楼层 |阅读模式
本帖最后由 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 为什么在写在开始的地方,为什么这样就能达到最小化的效果。
最好一句句的详细代码的作用!
小子百思不得其解,还忘各位不吝赐教,为我解惑。
发表于 2013-1-30 23:52:56 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
lijinpengying + 1 受教 了!

查看全部评分

发表于 2013-1-31 00:14:55 | 显示全部楼层
不错的思维。。。
发表于 2013-1-31 04:06:45 | 显示全部楼层
我更喜欢这样:
  1. @echo off
  2. %1 start /min /i "" %0 : %*
  3. shift
  4. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
apang + 1 学习了

查看全部评分

发表于 2013-1-31 10:25:07 | 显示全部楼层
回复 4# CrLf

%*的作用是?
  1. @echo off
  2. %1 start /min /i "" %0 ::&shift&goto :eof
  3. pause
复制代码
 楼主| 发表于 2013-1-31 10:30:40 | 显示全部楼层
回复 2# batman


    谢谢大大
 楼主| 发表于 2013-1-31 10:31:03 | 显示全部楼层
谢谢各位,又学到了不少!
发表于 2013-2-1 00:46:20 | 显示全部楼层
回复 5# apang


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

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 12:47 , Processed in 0.018668 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表