标题: [文本处理] 直接双击bat文件和拖到cmd窗口运行有什么区别?运行完毕后,回显窗口都会自动关闭? [打印本页]
作者: lyonamstrong 时间: 2016-9-12 14:17 标题: 直接双击bat文件和拖到cmd窗口运行有什么区别?运行完毕后,回显窗口都会自动关闭?
本帖最后由 pcl_test 于 2016-9-12 19:40 编辑
1.直接双击.bat和拖到cmd窗口回车运行有什么区别?
如果撇开运行的路径不说,其它方面有什么不同?
2.是不是所有.bat脚本运行完毕后,回显的cmd窗口都会自动关闭?
比如我写了一个很简单的脚本,想要打开cmd,然后cd到桌面路径应该怎么写?- @echo off
- pushd C:\Users\Users\Desktop
复制代码
这样没有用,双击后cmd窗口一闪而过。
然后我再加了pause,这时窗口在,但是press any key之后窗口还是关闭。
作者: DiamondbacK 时间: 2016-9-12 14:42
本帖最后由 DiamondbacK 于 2016-9-14 10:46 编辑
1. 另一个不同是:双击 .bat 运行结束后会自动退出 cmd;在 cmd 中输入 .bat 路径运行,只要 .bat 中没有执行不带参数的 exit 命令,就不会在运行完成后退出 cmd。
双击 .bat 实际上是执行了复制代码
/c 开关的作用就是在执行完命令后自动退出。
2.- @cmd /k pushd "%USERPROFILE%\Desktop"
复制代码
或者不用 bat 脚本,而是给 cmd 创建一个快捷方式,将起始位置设置为 "%USERPROFILE%\Desktop"
或者不创建任何文件,而是在桌面空白处按住 Shift 点击右键,选择「在此处打开命令行窗口」。
作者: lyonamstrong 时间: 2016-9-12 15:41
本帖最后由 lyonamstrong 于 2016-9-12 15:47 编辑
回复 2# DiamondbacK
关于1,为什么会有这种区别?是不是有什么特定用途?如何加以利用?
我个人猜测哦,是不是说打开一个cmd.exe就开启一个进程,只要不关闭这个cmd窗口,那么这个进程就始终在。比如要运行一连串的多个.bat脚本或者有后续操作时,就需要把这些拖进cmd窗口中。而如果是运行单个.bat时就直接双击.bat就可以了?
作者: DiamondbacK 时间: 2016-9-12 15:58
回复 3# lyonamstrong
任务完成后自动结束进程,是一个程序应该有的正常行为。
用途就是让你不用手动结束。
作者: lyonamstrong 时间: 2016-9-12 16:14
回复 4# DiamondbacK
那我能不能这么理解,如果要看回显,就拖到cmd中执行。如果只要执行不要看回显信息,那么就双击?
作者: dreamer 时间: 2016-9-13 00:17
1,雙擊用使用的是/C參數 直接執行則是/K
可以參考 cmd /?
/C 執行字串中所描述的命令然後結束命令視窗
/K 執行字串中所描述的命令然後保留命令視窗
2.是這樣沒錯,除非使用/K參數,執行後才會保留視窗
您舉的列子因為跑完了所以直接關閉,這是正常的,當您按了一任鍵表示執所有指令執行完畢關閉視窗也是正常的
例如這個:复制代码
作者: /zhqsystem/zhq 时间: 2016-9-13 02:42
1,批处理属于cmd.exe子进程,方式类似cmd.exe中call "批处理"另一种解释是cmd.exe "批处理"[此类为系统默认关联],就像记事本打开TXT一样
没有什么不同只是注意for内%号多一和少一,批处理是cmd的集合,便于批量处理和编辑比cmd自身高级例如goto等循环调用,但必须借助主进程来完成
2,(1)运行完毕是自动退出[没有特殊执行会退出,因为没有要执行的内容]{特殊情况依旧不会退出例如pause虽然已执行完但是不会退出,需要用户交互控制}
(2)例子:请查阅相关路径用标准写法跳转"path"
作者: 诗歌王位 时间: 2016-9-13 08:10
采用批处理输入:cmd /k
然后弹出框输入:12
结果出现当前系统时间、当前系统时间太牛逼了,怎么回事?
桌面上也没有叫12的文件或程序啊
作者: CrLf 时间: 2016-9-13 09:07
回复 8# 诗歌王位
初步判断这应该是个 .bat 或者 .cmd,那么可以这样:- for %%a in (12.bat 12.cmd) do echo;%%~$PATH:a
复制代码
如果系统里有 where.exe,那可以这样:复制代码
一个等价的 bat 如下(第 3 个 for 是用来核实大小写):- @echo off
-
- set mypath=%path:"=%
- set mypath="%mypath:;=" "%"
-
- set mypathext=%pathext:"=%
- set mypathext="%mypathext:;=" "%"
-
- set basename=12
-
- for %%a in (%mypath%) do (
- for %%b in (%mypathext%) do (
- for %%c in ("%%~fa\%basename%%%~b") do (
- if exist %%c echo %%~fc
- )
- )
- )
-
- pause
复制代码
也可以用 Tools 库- mshta http://bathome.net/s/hta/?string Tools.where('12') | more
复制代码
作者: idos 时间: 2016-9-13 21:13
回复 6# dreamer
为什么/c参数在cmd窗口使用后不会关闭cmd窗口,在批处理却可以,比如:复制代码
作者: DiamondbacK 时间: 2016-9-13 21:45
回复 10# idos
在命令行窗口运行 cmd /c,就是创建了一个 cmd.exe 子进程,只不过在父进程窗口中而不是新窗口中。
子进程结束后,就自动返回了父进程,子进程的结束本就不应该关闭父进程的窗口。
作者: idos 时间: 2016-9-13 22:11
回复 11# DiamondbacK
哇哦,好吧
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |