标题: [文件操作] 为何cmd窗口在命令执行完后不关闭 [打印本页]
作者: 5i365 时间: 2021-8-4 13:59 标题: 为何cmd窗口在命令执行完后不关闭
代码如下:- @echo off
- (echo notepad
- echo del %%0
- )>a.bat
- start a.bat
- del %0
复制代码
把上面的代码存为b.bat,执行它后生成a.bat批处理后,接着执行它,然后删除自身
a.bat执行完后也删除自身
目前的执行情况是,最终目的达到了,两个批处理都执行并删除了,
但是a.bat在执行完后,提示文件不存在,且cmd窗口没关闭
请教高手,怎样解决这两个问题, 提前感谢
作者: yakeyun 时间: 2021-8-4 16:55
本帖最后由 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
作者: 5i365 时间: 2021-8-4 18:45
本帖最后由 5i365 于 2021-8-4 19:07 编辑
回复 2# yakeyun
感谢大侠支招,现在还有如下的问题,能帮忙看下吗?再次感谢!!!:
现在下面代码另存成的批处理, 是最后删除的, 我的本意是,它只是生成a.bat b.bat c.bat三个批处理文件,生成后它的使命就完成,就删除自身,而不想最后删- @echo off
-
- ::a.bat 启动记事本, 记事本关闭后, 运行b.bat
- (echo,start /wait notepad
- echo,call b.bat
- )>a.bat
-
- ::b.bat 先删a.bat, 启动计算器, 计算器关闭后, 运行c.bat
- (echo,del a.bat
- echo,start /wait calc
- echo,call c.bat
- )>b.bat
-
- ::c.bat 先删b.bat, 启动写字板, 删除自己
- (echo,del b.bat
- echo,start /wait wordpad
- echo,del %%0
- )>c.bat
-
- call a.bat
- del %0
复制代码
作者: cmd1152 时间: 2021-8-4 19:56
回复 3# 5i365
去掉/wait
作者: 5i365 时间: 2021-8-4 20:12
回复 4# cmd1152
去掉后, 记事本, 计算器, 写字板就同时打开了
作者: cmd1152 时间: 2021-8-4 20:31
回复 5# 5i365
Call改成Start
作者: 5i365 时间: 2021-8-4 21:17
回复 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>
作者: yakeyun 时间: 2021-8-4 22:45
回复 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
作者: 5i365 时间: 2021-8-5 07:03
回复 8# yakeyun
感谢支招!! 确实有个特殊要求:
上面批处理, 我的本意是,让它只是生成a.bat b.bat c.bat三个批处理文件,然后就自删,再执行a.bat, 接着b.bat, 最后c.bat, 这三个批处理内的程序也是先后运行, 也是先后删除
作者: cmd1152 时间: 2021-8-5 11:19
回复 9# 5i365
自删了怎么执行?
作者: yakeyun 时间: 2021-8-5 23:21
本帖最后由 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
作者: 5i365 时间: 2021-8-6 08:22
回复 11# yakeyun
非常感谢支招, 有两个情况,
批处理没有删自身,删的test.bat
b和c是一块删的
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |