Board logo

标题: [已解决]批处理如何在新CMD窗口中执行命令? [打印本页]

作者: wolfan    时间: 2011-8-20 12:51     标题: [已解决]批处理如何在新CMD窗口中执行命令?

本帖最后由 wolfan 于 2011-8-20 22:56 编辑

如何在一个新CMD窗口中执行相关命令,一定时间后自动关闭。
  1. 1.bat
  2. start cmd ??????  <--- 不知如何在这启动:S
  3. call :s  <-------  这个:S 在新窗口中执行。
  4. :s
  5. echo yes.
  6. ping 127.1 -n 5 >nul
  7. echo no.
  8. color 12
  9. goto home  <----- 这个HOME是在1.BAT中
复制代码

作者: raymai97    时间: 2011-8-20 13:30

我写了2个给你参考参考~

不显示新窗口:
  1. @Echo off
  2. if "%1"=="ray" goto s
  3. call "%~0" ray
  4. echo Home here.
  5. pause>nul
  6. exit
  7. :s
  8. echo yes.
  9. ping -n 2 127.1>nul
  10. echo no.
  11. color f0
  12. exit /b
复制代码
显示新窗口:
  1. @echo off
  2. if "%1"=="ray" goto s
  3. start "" "%~0" ray
  4. echo Home here.
  5. pause>nul
  6. exit
  7. :s
  8. echo yes.
  9. ping -n 2 127.1>nul
  10. echo no.
  11. color f0
  12. exit
复制代码

作者: wolfan    时间: 2011-8-20 22:54

回复 2# raymai97


    多谢IN~ 、
那个,请问,这个的核心是那部份,运作原理大概又是怎样的呢?
  1. if "%1"=="ray" goto s
  2. start "" "%~0" ray
复制代码

作者: raymai97    时间: 2011-8-21 08:56

回复 3# wolfan
  1. if "%1"=="ray" goto s
  2. start "" "%~0" ray
复制代码
你见过死循环么?也就是Start "" %0,这个会无限弹窗,导致内存耗尽的东西。我的第二句用start "" "%~0" ray就是为了防止这个死循环,用批处理start的批处理,首先会检查参数(if "%1"=="ray" goto s),如果发现%1是ray,就不会再start。如果没有判断,它就会一直start不停,导致无限弹窗

所以,第一句是为了判断是直接运行,还是批处理运行的,而我是用参数来判断的,%1就是第一个参数的意思

比如start "" "%~0" abc def

这样%1就是abc
%2就是def

第二句则是为了让批处理start它自己,并在后面加上ray(参数1),start后肯定又回到第一句,即“if "%1"=="ray" goto s”,检查参数1,如果是ray就去s,不要再start它自己。

明白么?

再附上一个代码
  1. @echo off
  2. if "%1"=="abc" goto abc
  3. start "" %0 abc
  4. echo 我是第一个窗口
  5. pause>nul
  6. exit
  7. :abc
  8. echo 我是第二个窗口
  9. echo.
  10. echo 由第一个窗口用start "" "%0 abc打开的
  11. pause>nul
  12. exit
复制代码

作者: wolfan    时间: 2011-8-21 16:56

回复 4# raymai97


    多谢大人,学习到了好东西。




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