在Windows批处理文件或命令提示符中,例如,调用start mspaint
和mspaint
之间的区别是什么?他们似乎完全一样。
另一个例子,所有4个案例似乎做同样的事情。你能帮我理解微妙的差异吗?
taskmgr
C:\Windows\System32\Taskmgr.exe
start taskmgr
start C:\Windows\System32\Taskmgr.exe
后续:看起来start
会打开一个单独的后台命令提示符来运行您在其后编写的程序(来源:https://technet.microsoft.com/en-us/library/cc770297(v=ws.11).aspx)。这与Linux的myApp &
格式相同 - 您有&
后缀吗?
答案 0 :(得分:2)
见开始/?并致电/?三种方式的帮助。
c:\windows\notepad.exe
在批处理文件中,批处理将等待程序退出。什么时候 键入命令提示符不等待图形 程序退出。
如果程序是批处理文件,则传输控件并且不执行其余的调用批处理文件。
start "" c:\windows\notepad.exe
开始启动程序但不等待。控制台程序在新窗口中启动。使用/ b开关强制控制台程序进入同一窗口,这将取消Start的主要目的。
开始使用Windows图形外壳 - 与在WinKey + R中键入(运行对话框)相同。试试
start shell:cache
另请注意第一组引号(如果有)必须是窗口标题。
调用用于启动批处理文件并等待它们退出并继续当前批处理文件。
参考Start
,只输入程序名称。
帮助Windows查找程序和文档
程序和文档可以添加到注册表中,因此在“开始 - 运行”对话框或快捷方式中键入其名称而不显示其路径,Windows可以找到它们。
REGEDIT4
;The bolded name below is the name of the document or program, <filename>.<file extension>
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\IE.txt]
;The @ means the path to the file is assigned to the default value for the key.
;The whole path in enclosed in a quotation mark ".
@="\"C:\\Program Files\\Internet Explorer\\IE.txt\""
;Optional Parameters. The semicolon means don't process the line. Remove it if you want to put it in the registry
;Informs the shell that the program accepts URLs.
;"useURL"="1"
;Sets the path that a program will use as its' default directory. This is commented out.
;"Path"="C:\\Program Files\\Microsoft Office\\Office\\"
CMD预处理命令并找到该文件,然后调用CreateProcess
。开始 - 运行对话框或Start
命令使用最终调用ShellExecuteEx
的{{1}}。
这是CreateProcess
规则 - 注意CMD提供CreateProcess
的完整路径。 https://msdn.microsoft.com/en-us/library/ms682425
1.加载应用程序的目录。
2.父进程的当前目录。
3. 32位Windows系统目录。使用GetSystemDirectory函数获取此目录的路径。
- 16位Windows系统目录。没有函数可以获取此目录的路径,但会搜索它。该目录的名称是System。
醇>5.Windows目录。使用GetWindowsDirectory函数获取此目录的路径。
6. PATH环境变量中列出的目录。请注意,此功能不会搜索App Paths注册表项指定的每个应用程序路径。要在搜索序列中包含此每个应用程序路径,请使用ShellExecute函数。
CreateProcess
在这里https://msdn.microsoft.com/en-us/library/bb759784(v=vs.85).aspx
CMD预处理可在我的Skydrive上获得 - 最初来自MS网站但不多了。请参阅Windows NT命令Shell Ch 2 https://1drv.ms/f/s!AvqkaKIXzvDieQFjUcKneSZhDjw
答案 1 :(得分:1)
当您希望应用程序启动时,您需要调用start application
并立即返回命令shell以获取更多命令。
(在Linux上,最接近等效的start
是&
后缀)
有些命令可以在没有start
前缀的情况下执行此操作。这就是你所经历的。
另一方面,如果您希望应用程序立即返回“阻止”shell,请cmd /c
前缀
尝试cmd /c taskmgr
,你会看到它会阻止命令窗口,直到你退出它。
关于taskmgr
的问题,3种可能性相同:
taskmgr
位于系统路径中:系统找到或不使用完整路径taskmgr
立即返回命令窗口。在这种情况下,start
是多余的。