Board logo

标题: [其他] 【已解决】BAT批处理%1 cmd /k %0 :是什么意思? [打印本页]

作者: zhanglei1371    时间: 2014-2-17 16:42     标题: 【已解决】BAT批处理%1 cmd /k %0 :是什么意思?

本帖最后由 zhanglei1371 于 2014-2-18 20:15 编辑

调试时把这句放在开头能防止一闪而过的现象,前面的%1是什么意思?
放在开头又是什么意思?
作者: apang    时间: 2014-2-18 15:41

本帖最后由 apang 于 2014-2-18 15:42 编辑

调用批处理自身(%0),冒号(:)作为%0的参数传递给%1
当调用自身执行到这一行时,实际上就是执行这一句:
  1. : cmd /k %0 :
复制代码
冒号会当作标签,该行不予执行,保证仅仅调用一次批处理自身
如果没有%1(即 cmd /k %0),会无限多次地调用自身,就是死循环
cmd /k 使得调用自身后保留cmd窗口而不是退出批处理
作者: zhanglei1371    时间: 2014-2-18 17:30

回复 2# apang


    谢谢阿胖大师的回答,不过我还有点不明白,下面这个就不行:
  1. @echo off
  2. : cmd /k %0 :
  3. echo sdfsdfsdf
  4. if sdfl then geo dn
  5. pause
复制代码
而且看您这两个回复的代码:
http://bbs.bathome.net/thread-28856-1-1.html
  1. @echo off
  2. %1(for /f "tokens=1*" %%a in ('"%~0" :^|sort') do echo,%%b)>b.txt&exit/b
  3. for /f "tokens=1-3delims==" %%a in (a.txt) do echo,%%c %%a=%%b=%%c
复制代码

http://bbs.bathome.net/thread-28862-1-1.html
  1. @echo off
  2. %1(for /f "delims=" %%a in ('"%~0" :')do net user "%%~nxa")2>nul&pause&exit/b
  3. for /f "skip=4 delims=" %%a in ('net user') do (
  4.     set "s=%%a"
  5.     setlocal enabledelayedexpansion
  6.     for /l %%b in (0 25 50) do echo,!s:~%%b,25!
  7.     endlocal
  8. )
复制代码
中,%1和%0 :也反复出现了,这里是什么意思,还望指教。
作者: apang    时间: 2014-2-18 18:48

回复 3# zhanglei1371
  1. @echo off
  2. : cmd /k %0 :
  3. echo sdfsdfsdf
  4. if sdfl then geo dn
  5. pause
复制代码
所谓调用自身,其实就是在批处理里面调用另外一个批处理,只不过“另外一个批处理”是自己罢了
这个代码双击时第二行被跳过,不会调用自身
如果第二行是%1 cmd /k %0 :
双击时,由于%1 初始值为空,执行的是 cmd /k %0 :
这样才会调用自身,%1才会赋值为冒号,执行的是 : cmd /k %0 :




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