start与start cmd的区别

首先需要知道,cmd是start命令的一个参数,与start命令其他参数并不冲突
start xxx.exe和start cmd xxx.exe的区别:start相当于就是双击的效果,start cmd相当于打开一个新的cmd并且执行命令
举个例子,nginx.exe,start nginx.exe就是一个窗口闪一下,就像双击nginx.exe,而start cmd nginx.exe就是打开一个cmd窗口执行nginx.exe,就像打开一个cmd窗口,执行nginx.exe

start命令相关参数

1
start ["title"] [/d path] [/i] [/min] [/max] [/separate | /shared] [/low | /normal | /high | /realtime] [/wait] [/b] [command/program] [parameters]
  1. “title”: 可选参数,指定窗口标题。
  2. /d path: 可选参数,指定启动程序的工作目录。
  3. /i: 可选参数,以新窗口中的分离模式启动程序。
  4. /min: 可选参数,启动程序时最小化窗口。
  5. /max: 可选参数,启动程序时最大化窗口。
  6. /separate | /shared: 可选参数,指定启动程序时使用的窗口类型。/separate 表示在新的独立窗口中启动程序(默认值),/shared 表示在共享控制台窗口中启动程序。
  7. /low | /normal | /high | /realtime: 可选参数,指定启动程序时使用的进程优先级。/low 表示低优先级,/normal 表示正常优先级(默认值),/high 表示高优先级,/realtime 表示实时优先级。
  8. /wait: 可选参数,等待程序结束后再退出。
  9. /b: 可选参数,以后台模式启动程序。

原文链接:https://blog.csdn.net/m0_47406832/article/details/130379434

cmd命令

1
2
@echo off
start cmd </c或者/k> "command"
  1. @echo off:下面的命令都不在窗口中打印,直到遇到@echo on,@echo on下面的命令会打印
  2. start:打开一个新窗口执行命令,并且不会关闭窗口
  3. cmd:打开一个新的cmd窗口,但是不加参数不会在新窗口执行后面的命令
  4. /c:在新的cmd窗口执行/c后面的命令,执行完关闭窗口
  5. /k:在新的cmd窗口执行/c后面的命令,执行完不关闭窗口
  6. “command”:可执行命令,包括exe等文件

for语句

1
2
3
set newcd=%cd% //将%cd%赋给newcd,%cd%代表的是当前目录
set newpath=%newcd:\=\\% //将newcd中的\换成\\
for /f "skip=1 tokens=1" %%i in ('wmic process where "ExecutablePath='%newpath%\\nginx.exe'" get ProcessId ^| findstr /R /V "^$"') do ( taskkill /F /PID %%i )
  1. skip=1:跳过结果第一行
  2. tokens=1:获取结果的第一列
  3. %%i in:将获取的结果赋给%%i
  4. wmic process where “ExecutablePath=’%newpath%\nginx.exe’” get ProcessId ^| findstr /R /V “^$”:执行命令,并且跳过空行(findstr /R /V “^$”),在cmd中执行的时候,不需要加’^’,但是在for命令中需要

if语句

  1. if语句中可以包含很多语句,但是它有一个特点,就是整个if块的语句(包括else)都是在一起执行的,如下
if “test” == “test” ( set one=one set two=two ) set one=one set two=two

但是这样就有一个问题,因为是在一起执行,那么if块中读取变量,在运行到if的时候所有变量就都确定好了,也就是说if语句中对同一个变量**自修改赋值**是不行的,如下

if “test” == “test” ( set one=one set one=%one% two ) echo %one%

如上所示if中的第二个set,并没有等前一句set执行完在读取%one%,而是在执行的一瞬间读取one,如果向要在if块中**自修改赋值**,一是使用goto语句,这样可以跳出if,二是通过变量延迟,如下

setlocal EnableDelayedExpansion if “test” == “test” ( set one=one set one=!one! two ) echo %one%

通过setlocal EnableDelayedExpansion开启变量延迟,并且读取变量时,将%%改为!!,哪怕一起执行多条语句,变量也只会在执行到当前语句的时候读取


本站总访问量:次本站总访问数:人
本站由 Peng Tong 使用 Stellar 1.29.1 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。