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

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

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

调试时把这句放在开头能防止一闪而过的现象,前面的%1是什么意思?
放在开头又是什么意思?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

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

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

评分人数

TOP

回复 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 :也反复出现了,这里是什么意思,还望指教。

TOP

回复 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 :
1

评分人数

TOP

返回列表