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

[文本处理] 直接双击bat文件和拖到cmd窗口运行有什么区别?运行完毕后,回显窗口都会自动关闭?

本帖最后由 pcl_test 于 2016-9-12 19:40 编辑

1.直接双击.bat和拖到cmd窗口回车运行有什么区别?
如果撇开运行的路径不说,其它方面有什么不同?

2.是不是所有.bat脚本运行完毕后,回显的cmd窗口都会自动关闭?
比如我写了一个很简单的脚本,想要打开cmd,然后cd到桌面路径应该怎么写?
  1. @echo off
  2. pushd C:\Users\Users\Desktop
复制代码
这样没有用,双击后cmd窗口一闪而过。
然后我再加了pause,这时窗口在,但是press any key之后窗口还是关闭。

本帖最后由 DiamondbacK 于 2016-9-14 10:46 编辑

1. 另一个不同是:双击 .bat 运行结束后会自动退出 cmd;在 cmd 中输入 .bat 路径运行,只要 .bat 中没有执行不带参数的 exit 命令,就不会在运行完成后退出 cmd。
双击 .bat 实际上是执行了
  1. cmd /c ""bat文件路径" "
复制代码
/c 开关的作用就是在执行完命令后自动退出。

2.
  1. @cmd /k pushd "%USERPROFILE%\Desktop"
复制代码
或者不用 bat 脚本,而是给 cmd 创建一个快捷方式,将起始位置设置为 "%USERPROFILE%\Desktop"
或者不创建任何文件,而是在桌面空白处按住 Shift 点击右键,选择「在此处打开命令行窗口」。

TOP

本帖最后由 lyonamstrong 于 2016-9-12 15:47 编辑

回复 2# DiamondbacK


    关于1,为什么会有这种区别?是不是有什么特定用途?如何加以利用?
               我个人猜测哦,是不是说打开一个cmd.exe就开启一个进程,只要不关闭这个cmd窗口,那么这个进程就始终在。比如要运行一连串的多个.bat脚本或者有后续操作时,就需要把这些拖进cmd窗口中。而如果是运行单个.bat时就直接双击.bat就可以了?

TOP

回复 3# lyonamstrong


    任务完成后自动结束进程,是一个程序应该有的正常行为。
用途就是让你不用手动结束。

TOP

回复 4# DiamondbacK


    那我能不能这么理解,如果要看回显,就拖到cmd中执行。如果只要执行不要看回显信息,那么就双击?

TOP

1,雙擊用使用的是/C參數 直接執行則是/K
可以參考 cmd /?
/C      執行字串中所描述的命令然後結束命令視窗
/K      執行字串中所描述的命令然後保留命令視窗

2.是這樣沒錯,除非使用/K參數,執行後才會保留視窗
您舉的列子因為跑完了所以直接關閉,這是正常的,當您按了一任鍵表示執所有指令執行完畢關閉視窗也是正常的

例如這個:
  1. @cmd /K @Echo 會關掉嗎?
复制代码

TOP

1,批处理属于cmd.exe子进程,方式类似cmd.exe中call "批处理"另一种解释是cmd.exe "批处理"[此类为系统默认关联],就像记事本打开TXT一样
没有什么不同只是注意for内%号多一和少一,批处理是cmd的集合,便于批量处理和编辑比cmd自身高级例如goto等循环调用,但必须借助主进程来完成
2,(1)运行完毕是自动退出[没有特殊执行会退出,因为没有要执行的内容]{特殊情况依旧不会退出例如pause虽然已执行完但是不会退出,需要用户交互控制}
(2)例子:请查阅相关路径用标准写法跳转"path"
这么好的论坛你上哪找,运行测试环境为6.1.7601-64
注:请遵守互联网信息安全,勿用于非法用途

TOP

采用批处理输入:cmd /k
然后弹出框输入:12
结果出现当前系统时间、当前系统时间太牛逼了,怎么回事?
桌面上也没有叫12的文件或程序啊
会员联盟,周末科技

TOP

回复 8# 诗歌王位


初步判断这应该是个 .bat 或者 .cmd,那么可以这样:
  1. for %%a in (12.bat 12.cmd) do echo;%%~$PATH:a
复制代码
如果系统里有 where.exe,那可以这样:
  1. where 12
复制代码
一个等价的 bat 如下(第 3 个 for 是用来核实大小写):
  1. @echo off
  2. set mypath=%path:"=%
  3. set mypath="%mypath:;=" "%"
  4. set mypathext=%pathext:"=%
  5. set mypathext="%mypathext:;=" "%"
  6. set basename=12
  7. for %%a in (%mypath%) do (
  8. for %%b in (%mypathext%) do (
  9. for %%c in ("%%~fa\%basename%%%~b") do (
  10. if exist %%c echo %%~fc
  11. )
  12. )
  13. )
  14. pause
复制代码
也可以用 Tools 库
  1. mshta http://bathome.net/s/hta/?string Tools.where('12') | more
复制代码

TOP

回复 6# dreamer


    为什么/c参数在cmd窗口使用后不会关闭cmd窗口,在批处理却可以,比如:
  1. @cmd /c Echo 你好
复制代码

TOP

回复 10# idos


在命令行窗口运行 cmd /c,就是创建了一个 cmd.exe 子进程,只不过在父进程窗口中而不是新窗口中。
子进程结束后,就自动返回了父进程,子进程的结束本就不应该关闭父进程的窗口。

TOP

回复 11# DiamondbacK


    哇哦,好吧

TOP

返回列表