最小化当前终端 执行命令 cmd 奇技淫巧

@echo off
%1 (start /min cmd.exe /c %0 :&exit)
echo put your code below
pause

事实上,执行完第二行,由于&exit 存在,当前终端会退出,所以在当前的终端,是不会继续执行第三行以及后面的代码的。
第二行的作用:

  1. 当前终端,因为仅仅只调用了批处理文件,所以 %1 是空的,所以不影响。
  2. start /min 重新打开一个终端,并最小化运行后面的命令
  3. cmd.exe /c 调用cmd.exe 程序,并用/c 参数,执行完后,即退出终端,这样保持 运行批处理文件的方式,即运行结束之后,自动关闭终端。
  4. %0 : 事实上,这是两个参数,%0 即当前批处理文件,即递归的调用自身文件,第二个参数 :,这里利用了一个批处理的语法特性,:放在句首,仅作代码块标签命名使用,用于goto语句的跳转,:之后的语句并不会执行,但在剧中却并不会产生作用。类似的这里两个冒号::,它在句首起注释作用,但是句中出现,不起作用。在这段中,冒号也会作为cmd.exe的参数,被标记为%1,这就是它tricky的地方,在被调用的终端执行脚本中,第二行的句首 %1变成了:,那么第二行就被标记不再被执行(如果是::则被注释,效果类似),然后就继续执行。

原本以为这是我没遇到过的语法,不断实验之后,发现 %1:必须同时出现才能实现只递归调用一次的效果,猛然领悟,有点舒服。

Note: 需要注意的是,由于利用了引用参数的关系,所以,批处理脚本不能存在参数,否则,就蛋疼了。

你可能感兴趣的:(最小化当前终端 执行命令 cmd 奇技淫巧)