标题: [其他] 【已解决】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),会无限多次地调用自身,就是死循环
cmd /k 使得调用自身后保留cmd窗口而不是退出批处理
作者: zhanglei1371 时间: 2014-2-18 17:30
回复 2# apang
谢谢阿胖大师的回答,不过我还有点不明白,下面这个就不行:- @echo off
- : cmd /k %0 :
- echo sdfsdfsdf
- if sdfl then geo dn
- pause
复制代码
而且看您这两个回复的代码:
http://bbs.bathome.net/thread-28856-1-1.html- @echo off
- %1(for /f "tokens=1*" %%a in ('"%~0" :^|sort') do echo,%%b)>b.txt&exit/b
- for /f "tokens=1-3delims==" %%a in (a.txt) do echo,%%c %%a=%%b=%%c
复制代码
和
http://bbs.bathome.net/thread-28862-1-1.html- @echo off
- %1(for /f "delims=" %%a in ('"%~0" :')do net user "%%~nxa")2>nul&pause&exit/b
- for /f "skip=4 delims=" %%a in ('net user') do (
- set "s=%%a"
- setlocal enabledelayedexpansion
- for /l %%b in (0 25 50) do echo,!s:~%%b,25!
- endlocal
- )
复制代码
中,%1和%0 :也反复出现了,这里是什么意思,还望指教。
作者: apang 时间: 2014-2-18 18:48
回复 3# zhanglei1371 - @echo off
- : cmd /k %0 :
- echo sdfsdfsdf
- if sdfl then geo dn
- pause
复制代码
所谓调用自身,其实就是在批处理里面调用另外一个批处理,只不过“另外一个批处理”是自己罢了
这个代码双击时第二行被跳过,不会调用自身
如果第二行是%1 cmd /k %0 :
双击时,由于%1 初始值为空,执行的是 cmd /k %0 :
这样才会调用自身,%1才会赋值为冒号,执行的是 : cmd /k %0 :
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |