找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26387|回复: 11

[文件操作] 为何cmd窗口在命令执行完后不关闭

[复制链接]
发表于 2021-8-4 13:59:54 | 显示全部楼层 |阅读模式
代码如下:
  1. @echo off
  2. (echo notepad
  3. echo del %%0
  4. )>a.bat
  5. start a.bat
  6. del %0
复制代码
把上面的代码存为b.bat,执行它后生成a.bat批处理后,接着执行它,然后删除自身
a.bat执行完后也删除自身

目前的执行情况是,最终目的达到了,两个批处理都执行并删除了,

但是a.bat在执行完后,提示文件不存在,且cmd窗口没关闭

请教高手,怎样解决这两个问题, 提前感谢
发表于 2021-8-4 16:55:39 | 显示全部楼层
本帖最后由 yakeyun 于 2021-8-4 17:08 编辑

回复 1# 5i365

要让程序单独运行,脱离代码文件执行,所以需要加上start命令。
同时调用另一个批处理,最好用call命令,可以等待a代码执行完了,再执行b的自删除,避免报错。
@echo off
(echo,start notepad
echo,del %%0
)>a.bat
call a.bat
del %0
 楼主| 发表于 2021-8-4 18:45:35 | 显示全部楼层
本帖最后由 5i365 于 2021-8-4 19:07 编辑

回复 2# yakeyun

感谢大侠支招,现在还有如下的问题,能帮忙看下吗?再次感谢!!!:

现在下面代码另存成的批处理, 是最后删除的, 我的本意是,它只是生成a.bat     b.bat     c.bat三个批处理文件,生成后它的使命就完成,就删除自身,而不想最后删
  1. @echo off

  2. ::a.bat 启动记事本, 记事本关闭后, 运行b.bat
  3. (echo,start /wait notepad
  4. echo,call b.bat
  5. )>a.bat

  6. ::b.bat 先删a.bat, 启动计算器, 计算器关闭后, 运行c.bat
  7. (echo,del a.bat
  8. echo,start /wait calc
  9. echo,call c.bat
  10. )>b.bat

  11. ::c.bat 先删b.bat, 启动写字板, 删除自己
  12. (echo,del b.bat
  13. echo,start /wait wordpad
  14. echo,del %%0
  15. )>c.bat

  16. call a.bat
  17. del %0
复制代码
发表于 2021-8-4 19:56:37 | 显示全部楼层
回复 3# 5i365


    去掉/wait
 楼主| 发表于 2021-8-4 20:12:33 | 显示全部楼层
回复 4# cmd1152


去掉后, 记事本, 计算器, 写字板就同时打开了
发表于 2021-8-4 20:31:50 | 显示全部楼层
回复 5# 5i365


    Call改成Start
 楼主| 发表于 2021-8-4 21:17:30 | 显示全部楼层
回复 6# cmd1152

你好, 改成start 最后会提示如下的信息, CMD窗口不能自动关闭

   
C:\Users\Administrator\Desktop>start /wait notepad

C:\Users\Administrator\Desktop>call b.bat

C:\Users\Administrator\Desktop>del a.bat

C:\Users\Administrator\Desktop>start /wait calc

C:\Users\Administrator\Desktop>call c.bat

C:\Users\Administrator\Desktop>del b.bat

C:\Users\Administrator\Desktop>start /wait wordpad

C:\Users\Administrator\Desktop>del c.bat
找不到批处理文件。
找不到批处理文件。
找不到批处理文件。

C:\Users\Administrator\Desktop>
发表于 2021-8-4 22:45:56 | 显示全部楼层
回复 3# 5i365


如果没有特殊需求,为什么不简化运行:

@echo off
start /wait notepad
start /wait calc
:calc
tasklist /nh>C:\kill.ini
@find /I /C "Calculator.exe" C:\kill.ini > nul
if %ERRORLEVEL% == 1 (start /wait wordpad) else (goto calc)
del %0
 楼主| 发表于 2021-8-5 07:03:22 | 显示全部楼层
回复 8# yakeyun


    感谢支招!! 确实有个特殊要求:
上面批处理, 我的本意是,让它只是生成a.bat     b.bat     c.bat三个批处理文件,然后就自删,再执行a.bat, 接着b.bat, 最后c.bat, 这三个批处理内的程序也是先后运行, 也是先后删除
发表于 2021-8-5 11:19:34 | 显示全部楼层
回复 9# 5i365


    自删了怎么执行?
发表于 2021-8-5 23:21:02 | 显示全部楼层
本帖最后由 yakeyun 于 2021-8-5 23:22 编辑

回复 3# 5i365


@echo off

::a.bat
(echo,@echo off
echo,if exist test.bat del test.bat
echo,call notepad
echo,call b.bat
)>a.bat

::b.bat
echo,@echo off >b.bat
echo,del a.bat >>b.bat
echo,call calc >>b.bat
echo,:run >>b.bat
echo,tasklist /nh ^>C:\kill.ini >>b.bat
echo,find /I /C "Calculator.exe" C:\kill.ini > nul >>b.bat
echo,if %%ERRORLEVEL%% == 1 (call c.bat^&del b.bat^&taskkill /f /im cmd.exe) else (goto run) >>b.bat

::c.bat
(echo,@echo off
echo,start wordpad
echo,del %%0
)>c.bat

start /min a.bat
 楼主| 发表于 2021-8-6 08:22:12 | 显示全部楼层
回复 11# yakeyun


    非常感谢支招, 有两个情况,
批处理没有删自身,删的test.bat
b和c是一块删的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 21:05 , Processed in 0.032400 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表