delphi中运行DOS命令问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi中运行DOS命令问题相关的知识,希望对你有一定的参考价值。

WinExec('',SW_Hide);可以执行一些DOS命令,但有些命令是输入后还要按Y确认的,比如FORMAT格式化盘,怎么使程序执行这些DOS命令时也自动以Y确认

WinExec('Command.com /C main.exe > tmp.txt',SW_Hide);
WinExec -- windows api function
Command.com /C string -- Carries out the command specified by string, and then stops.
main.exe > tmp.txt -- dos 命令行 你可以改称你想要的, 如 copy c:\a d:\
只要是命令行能行, 放到这也行
SW_Hide -- WinExec参数, 表示 运行时隐藏dos的那个黑框

DOS命令集
shortcut------快捷方式
一、DIR 命令的格式:

dir [D:][PATH][NAME][/A][:attrib][/osorted][/l][/c[h]
(1)dir /a:attrib 缺省包含所有文件(系统文件.隐含文件)
attrib[:][h/-h]只显示隐含文件或非隐含文件.
[r/-r]只显示只读文件或非只读文件
[s/-s]只显示系统文件或非系统文件
[a/-a]只显示要归档文件或非归档文件
(2)/o[:]sorted:缺省完全按字母顺序,子目录显示在文件之前
/o[n/-n]:按字母顺序或按文件名顺序/反向显示
[e/-e]:按扩展名字母顺序/反向显示
[d/-d]:按时间顺序/反向显示
[s/-s]:按大小从大到小或/反向显示
[g/-g]:按子目录先于文件或文件先于子目录
(3)/s 参数:对当前目录及其子目录中所有文件进行列表列名:dir /s/a/o:n c:\>PRN
将c盘上的所有子目录和文件按隶属关系并根据子目录和文件字母顺序打印输出
(4)/B 参数:将只显示文件名与扩展名
(5)/L 参数:将全部用小写字母对文件或子目录进行列表
训练:
dir /a 列当前目录所有文件(含隐含及系统文件)
dir /ah 列隐含文件(包含子目录(隐含的) dir /a-h
dir /as 列系统文件 dir /a-s
dir /ad 列子目录 dir /a-d
dir /o 按字母顺序
dir /B 只显示文件名与扩展名

二、attrib [+r|-r] [+a|-a] [+s|-s] [+h|-h] [d: ] [name]

缺省 attrib name 显示文件的(文件)属性
attrib io.sys (或子目录)
shr c:\ io.sys 指定为系统(s) 隐含(h) 只读(r)文件
也可以attrib *.sys 显示扩展名为sys的文件属性
参数 [+r|-r] 将文件属性设置或解除 只读属性
[+a|-a] 将文件属性设置或解除 归档属性
[+h|-h] 将文件属性设置或解除 隐含属性 (尤其对子目录也起作用)
/s 参数 将当前及当前子目录下的所有文件均起作用
可以用来查找文件
例子:
attrib news86 列news86的文档属性
attrib +r report.txt 设置为只读 attrib -s -h record.txt
attrib +a a:*.*
attrib -a a:*.bak
xcopy a: b: /a 将A盘上的所有标志为"归档"属性的文件拷到B盘
xcopy a: b: /m 将A盘上的所有文件拷到B盘后并移去归档属性

三、cd 介绍: cd...返回上二级目录 "."代表当前目录 "."代表父目录

cd ..\..返回到上级目录的父目录(祖目录)
cd A:\ 将A盘的当前目录改为根目录
cd A:\xx 将A盘的当前目录改为子目录xx下
cd .. 先返回父目录,再进入父目录下的98子目录
cd ..返回到父目录
cd 进入根目录下的98子目录

四、copy [/y][/-y][/v][ /B]

copy /y 不加提示,对所有文件加以覆盖
/-y 加以提示,对所有文件 (yes或no提问 )
/v 拷贝以后加以校验
/B 按二进制进行显示
copy w1.wps con/b 可以将wps文件在屏幕上显示,而不必进入wps状态
copy .. 将父目录下的98子目录下的所有文件全拷到当前子目录
copy . 当当前目录下的97子目录下文件全部拷到当前目录
copy . c:\ 将当前目录下的所有文件拷到c盘根目录
. 意味着 *.* 文件
copy nul a.abc 将a.abc 文件清空(文件长度改为0)
copy 文件名+con 向文本文件中追加命令或内容
copy con 文件名 创建文本文件(F6存盘退出)
copy con prn 检测打印机的开关

五、xcopy命令

xcopy [source] [d:date] [/p] [/e] [/v] [/y]
xcopy [d:date] xcopy a:b:\ /d:08/18/98/s/v 拷贝98.08.18年后的文件
xcopy [/p] 提示创建子目录
xcopy 连带子目录一起拷贝. 注意:若目标盘上不存在此子目录,而在目标盘的结束符又
不以"\"为结束,则将提示:
does destination specify a file name or directory name on the target
[f=file,d=directory]?
在目标盘上创建文件[按下]还是创建子目录[按下d] ?应选择d键
xcopy[/v] 带较验
*1) xcopy 不拷贝系统和隐含文件,应先予以修改属性再拷贝
xcopy [/y] 覆盖时是否有提示, /y 不带提示
若省略目标盘或子目录名,则拷贝到当前目录下

六、 del /p

加/p 可以在删除前是否提示
如del后加子目录名,则将子目录下所有文件(隐含.系统.只读文件除外)全删除,加/p则可以确
认.

七、undelete [name] /au

不加提示地将所有满足条件的文件恢复(能够恢复的),并将首字母置成"#",若已存在,则按"#
% & 0 1 2-9 a-z"顺序加上.
如:undelete *.dbf/au 将扩展名为"dbf"的文件全恢复,并以"#"开头,作为文件名, /list 仅
列出可恢复的文件,而不恢复
undelete /load 将undelete装入内存
/unload 将undelete卸出内存
/s[drive]对指定驱动器进行监测管理
undelete/sc
将 undelete驻留内存,?并创建一个隐含的sentry 子目录对c盘删除的文件进行管理 undele
te/ds 恢复
相应恢复命令可以用undelete即可完整恢复出文件名(非常完整)
最常用undelete *.*
deltree /y [drive:path]
deltree 删除子目录及文件,尽管有些文件是系统文件或隐含文件
它可以带有通配符,带有通配符时,它将删除符合条件的文件及子目录如:?undelete *.dbf/a
u 将扩展名为"dbf"的文件全恢复,并以"#"开头作为文件
名.
/list 仅列出可恢复的文件,而不作恢复操作.
undelete/load 将undelete 装入内存.
/unload将undelete 卸出内存.
/s[drive] 对指定的驱动器进行监视管理.
undelete/sc 将undelete 驻留内存,并创建一个隐含的sentry子目录对C盘删除的文件进行管
理.相应恢复命令可以用undelete/ds 即可完整恢复出文件名(很完善).
最常用的是undelete *.*

八、deltree /y [drive:path]

deltree 删除子目录及文件,尽管有些文件是系统或隐含的.
它可以带有通配符,这时它将删除符合条件的文件或子目录.
如:存在L1文件,L2子目录,L3文件,L4子目录
deltree L*.* 将删除以上所有的文件和子目录,但在删除前加以确认,若不删除,可以输入"N
".
/y 参数是在删除时不加以确认就进行操作的.
它删除的文件可以用undelete恢复,?但不能恢复子目录及其下的文件,可以用特殊工具.如NO
RTON 8.0 等.
若提前使用了undelete/s,?则可以在sentry子目录下找到完整的文件,但名已经改变了.

九、dos=high[|low[umb|noumb]

dos=high,umb 则dos将自身装入高端内存(high)并能管理上位内存(umb).
noumb 则不管理上位内存.
在写入dos=high及umb 前应装入device=himem.sys
为了将程序或驱动程序装入上位内存,必须使用dos=umb,可省出大部分常规内存.
可以在config.sys的任何位置写上dos=high,umb
若显示hma not avoiable 或 load down low 则表明不能使用高端内存.

十、doskey 记录以前敲过的dos命令,可以用F7来显示,用"↑↓"来选择,用F9来输入选择的命
令号.

doskey/restall 重新装入一次,以前的命令行撤消.
doskey/history 显示内存中所有的命令,可以">"显示到其它文件中,缩写"/H".
doskey dir=cls 则击入dir等同于cls一样.
doskey/macros 可显示所有的宏定义,可使用">"重定义到文件中,可缩写"/M".
doskey dir= 可撤消对dir 的宏定义.
doskey p=dir$tdir*.exe/p$tdir c:\t$tdir c:\t$*
$t为命令的区分符,而$*为命令的结束符doskey/insert(overstrike)?在重新输入命令时,对
旧命令的修改是插入还是覆盖状态(默认).

十一、emm386.exe

提供对扩展内存的管理,使应用程序象使用常规内存一样能够使用它.
常见的用法是 在config.sys 中
device=c:\dos\himem.sys
device=c:\dos\emm386.exe ram
d=64 将DMA 内存数量设置为64K
noems 提供对上位内存的访问,但不提供对扩展内存的访问.
应注意的是在windows中最好不要用它,因为windows本身有对扩展内存进行管理
的程序.应采用windows中的管理器.

十二、fc 命令 fc/b dt.dat dt2.dat>b (作二进制代码比较)

比较两个文件,一般用作存取进度,修改游戏存储文件用.
实际代码位置应加上0100 如:0000 05E4:00 67
实际用debug -e 修改时应加上0100 即 0000 06E4:00 67
后面加上重定向文件">P" 可以将比较结果输出到p文件中.

十三、format /q /u /s /n:sectors /f:size /c

/q参数:快速格式化,仅扫描文件分配表和根目录区,仅对格式化过的磁盘有效.
使用时应确保格式化过后没有增加新的坏道.
/u参数:无条件格式化,并且不保存原来盘上的信息,可以防止"unformat".
/s参数:格式化为系统盘,也可以使用"sys"命令.
/f:size size 可以为160 180 320 360 720 1200 1440 2800
/n:sector n可以为1 格式为单面盘,容量为160k 180k
可以为4 可以在5寸高密驱动器上格式化360k磁盘
可以为8 可以在5寸高密驱动器上进行8个扇区的格式化.
/c 重新测试坏扇区,缺省时如果一个扇区标记为"坏",以后格式时就不在从新测
试,仅作标记,使用"/C"时可以从新测试.

十四、unformat 命令

对用format 格式过,且未用"/u"参数的命令起作用,用它可以来重新修复已经损
坏的硬盘分区表,但对网络盘不起作用.
unformat drive/l][/test][/p]
/l 显示每一个被unformat发现的文件和子目录,如果没有这个开关,只显示那些
破碎的文件和子目录,可以用ctrl+s 暂停,按任意键继续.
/test 仅作一个测试,不作实际的修复工作,作模拟过程.
/p 一边测试一边打印.
注:这种方法不能保证修复所有的文件,尤其是格式化后又添加过数据的磁盘.
恢复后的文件依次存放在subdir1....2....3等子目录中.

十五、interlnk
--------------------------------------------------------------------------------
DOS 基础命令
cd 改变当前目录 sys 制作DOS系统盘
copy 拷贝文件 del 删除文件

deltree 删除目录树 dir 列文件名

diskcopy 制磁盘 edit 文本编辑

format 格式化磁盘 md 建立子目录

mem 查看内存状况 type 显示文件内容

rd 删除目录 ren 改变文件名

记得多少啊,忘了就去上课看看,下面四个命令是新的,给出命令格式,你自己试试看
,学电脑重要的就是摸索。

cls 清屏

〔适用场合〕 屏幕上太乱了,或是屏幕上出现乱码了, 清除屏幕上显示内容但不
影响电脑内部任何信息

〔用 法〕 cls 回车

move 移动文件,改目录名

〔适用场合〕 移动文件到别的目录

〔用 法〕 move [文件名] [目录] 移动文件至新目录下

move [目录名] [目录名] 改目录名

〔例 子〕 c:\>move c:\autoexec.bat c:\old�

移动autoexec.bat文件至old目录下

c:\>move c:\config.sys c:\temp�

移动config.sys文件至old目录下

more 分屏显示

〔适用场合〕 当输出很多一屏显示不下时采用,几乎适合所有命令,尤其是type
等命令时很有用。 使用more时磁盘不能有写保护,也不适合光驱。

〔用 法〕 type [文件名] | more 分屏显示文件内容

more < [文件名] 分屏显示文件内容

〔例 子〕 C:\>type msdos.w40 | more

xcopy 拷贝目录和文件

〔适用场合〕 在进行连同子目录一起拷贝时很有用,在拷贝大量文件时比COPY命令
要快得多

〔用 法〕 xcopy [文件名] [目录] 将指定文件拷贝到指定目录

xcopy [源目录] [目的目录] 将源目录连子目录考到目的目录下

xcopy *.* [目录] /s 将文件与非空子目录拷贝到指定目录

其它常用参数还有: v 拷贝后校验,会影响速度
e 与s 相似,但即使子目录是空的也会拷贝。
help 帮助

〔适用场合〕 当您想具体了解DOS命令的使用方法时使用

〔用 法〕 help 提供所有DOS命令帮助

help [DOS命令] 提供有关命令的帮助

如果你只大致记得某个命令,可以在提示符后直接输入help命令,然后将出现下面的画
面:

attrib 设置文件属性

〔适用场合〕 想对文件做较特殊的处理时

〔用 法〕 attrib 显示所有文件的属性

attrib +r或-r [文件名] 设置文件属性是否为只读

attrib +h或-h [文件名] 设置文件属性是否隐含

attrib +s或-s [文件名] 设置文件属性是否为系统文件

attrib +a或-a [文件名] 设置文件属性是否为归档文件

attrib /s 设置包括子目录的文件在内的文件属性

〔例 子〕 C:\TEST>attrib +r wina20.386

C:\>attrib +h *.* /s� 隐含所有文件

date 显示及修改日期

〔适用场合〕 想知道或修改时间和日期

〔用 法〕 date 显示和改变当前日期

〔例 子〕 C:\>date 09-20-1996� 将日期改为1996年9月20日

C:\>date�

Current date is Tue 08-20-1996

Enter new date (mm-dd-yy):09-20-1996

按月-日-年的顺序修改当前日期 直接按回车键忽略修改日期

lable 设置卷标号

〔适用场合〕 用来为磁盘做个标记

〔用 法〕 label 显示磁盘卷标

label [盘符] [卷标名] 设定指定盘的卷标

〔例 子〕 C:\>label�
Volume in drive C is WANG
Volume Serial Number is 2116-1DD0
volume label (11 characters,Enter for none)?
可以输入卷标,直接回车后
Delete current volume label (Y/N)?
按y删除旧卷标,按n不更改

defrag 磁盘碎片整理

〔适用场合〕 磁盘读写次数很多,或磁盘使用时间很长了,可能需要使用这条命令
整理磁盘。磁盘碎片并不是指磁盘坏了,而只是由于多次的拷贝和删
除文件后,磁盘使用会很不连贯,致使速度变慢。

〔用 法〕 1. C:\>defrag�

2. 选择要整理的磁盘

3. 电脑分析磁盘状况,然后告诉我们磁盘有多少需整理。按Esc键

4. 选择Optimization Method(磁盘优化方法),选择“全部优化”
或“仅优化文件”

5. 选择Begin Optimization 开始整理

6. 整理完后,按回车键

7. 按Esc退出。
doskey 调用和建立DOS宏命令

〔适用场合〕 经常需要输入重复的命令时,有非常大的用处

〔用 法〕 doskey

将doskey驻留内存,开辟出缓冲区,以后输入的命令都将保存在缓冲
区中,可以随时调用

doskey [宏命令名]=[命令名]

将宏命令定义为命令,以后输入宏命令,电脑就会执行相应的命令

doskey /reinstall 重新安装doskey

doskey /bufsize= 设置缓冲区的大小

doskey /macros 显示所有doskey宏

doskey /history 显示内存中所有命令

doskey /insert|overstrike 设置新键入的字符是否覆盖旧的字符

〔例 子〕 C:\>DOSKEY�
C:\>dir
C:\>copy C:\temp\*.* a:
C:\>del c:\temp\*.*
C:\>copy b:\*.* c:\temp

上述四条命令都已被保存,用光标控制键的上下可以依次选择使用或
修改, 也可以用F7键列出保存的所有命令

C:\>doskey di=dir/w/p� 定义di为宏命令,意思是执行dir/w/p

fdisk 硬盘分区

〔建 议〕 只有硬盘被很利害的病毒感染时,或是一块新硬盘才需要分区,最好
请懂行的人指导。硬盘都需经过低级格式化,分区,格式化三个步骤
才可使用,成品电脑内的硬盘都已经做过这些加工了。

〔用 法〕 输入fdisk后按回车即可进入提示界面

emm386 扩展内存管理

〔建 议〕 这条命令比较复杂,在第五章中系统配置里将详细介绍

lh/loadhigh 将程序装入高端内存

〔适用场合〕 这条命令一般用在autoexec.bat中,当有些软件需要的基本内存很大
时,它会有用

〔用 法〕 lh [程序]

将程序装入高端内存 使用此命令时,config.sys文件中需有下面两
条语句。 device=emm386.exe dos=umb

lh [程序] /l:区号 将程序装入指定的umb区

lh /s 一般是由memmaker专用

〔例 子〕 C:\MOUSE\>lh mouse� 将鼠标驱动程序装入高端内存

memmaker 内存优化管理

〔适用场合〕 这个命令现在已经很少用了,在当年DOS流行时,想玩游戏可少不了
它,它可以腾出许多基本内存供游戏使用,只需安装一次即可

〔用 法〕 1. C:\>memmaker�

2. 回车继续,F3退出

3. 选择手动安装和自动安装,直接回车表示自动安装(回车得了)

4. 选择是否有程序需要扩充内存,可用空格键选择,Yes表示需要,
No不需要,按回车键即可。

5. 程序自动检测硬盘内是否安装了WINDOWS

6. 软驱中若有软盘则应将其取出,然后按回车键,电脑将重新起动
两次,不要中断,只需按回车键。

(其实很简单,一直按回车键就行了,呵呵)

msd 系统检测

〔适用场合〕 用于检查系统信息

〔用 法〕 1. C:\>msd 回车后可见到如下画面,在每个选项旁边加了注解,表
示该按钮的功用



2. 选择需查询的项目,比如选第一个Computer,将会弹出一个对话框
显示电脑的一些基本信息。你可以试试其他的选项,看看有什么用。

3. 按Alt+F键激活下拉菜单后, 选择"Exit"项退出。

undelete 恢复被删除的文件

〔适用场合〕 当不小心删错了文件时,它可以用得上。

DOS删除文件时,只是将文件从分配表中去除,在磁盘存储区内将文
件名的第一个字母删除,文件内容并未马上从磁盘中删除,所以能恢
复。

〔用 法〕 undelete 恢复已删除的文件

undelete /all 恢复文件且不再询问是否恢复,
以"#%&-0123456789abcdefghijklmnopqrstuvwxyz"的顺序为第一个
字母来恢复文件

undelete /list 列可恢复的文件名

undelete /s 可将undelete驻留内存,但几乎没人这样使用
prompt 设置提示符

〔适用场合〕 当你厌烦了c:\>的提示符或者您想使您的提示符与众不同时,您可以
试一试,非常有趣的DOS命令,可以随时显示时间与日期。

〔用 法〕 prompt $p$g 以当前目录名和>号为提示符,这是最常用的提示符

prompt $t 表示时间 prompt $d 表示日期

prompt $$ 表示$ prompt $q 表示=

prompt $v 表示当前版本 prompt $l 表示<

prompt $b 表示| prompt $h 表示退位符

prompt $e 表示Esc代表的字符 prompt $_ 表示回车换行

〔例 子〕 C:\DOS>prompt wang$g� 将wang>作为提示符

WANG>prompt $t$d$g� 使用时间、日期和>号做为提示符

0:01:07.77Thu 08-29-1996>prompt $p$g�

C:\DOS>

restore 恢复已备份的文件

〔建 议〕 如果以前用backup做过文件备份,则当原文件损坏时可以用它来恢复
文件。

将用backup命令备份的磁盘中的文件恢复到另一磁盘中,备份磁盘中
应有backup.00X和control.00X这两条文件。

〔用 法〕 restore [备份盘符] [目标盘符]

将备份盘上备份文件恢复到指定盘上

restore /s 将备份文件包括子目录都恢复到指定盘上

restore /p 让用户判断是否恢复文件

restore /b:日期 恢复日期以前的文件

restore /a:日期 恢复日期之后的文件

restore /l:时间 恢复时间之前的文件

restore /e:时间 恢复时间之后的文件

restore /m 只恢复上次备份后修改过的文件

restore /n 只恢复上次备份后已删 除的文件

restore /d 只显示要恢复的文件名

〔例 子〕 C:\DOS>restore a: c:�
Insert backup diskette 01 in drive A:
Press any key to continue . . .

在A驱中放入第一张备份盘,按任意键即可,恢复完第一张后,按顺
序放入其它盘即可。

当您用上述命令不能正确恢复文件时请用:

C:\DOS>restore a: c:\ /s�
time 显示及修改时间

〔适用场合〕 用于显示及修改时间,用法同date

〔例 子〕 C:\DOS>time�
Current time is 12:15:26.04a
Enter new time: 11:20:20.00p

按时:分顺序输入时间,再加上下午(a/p)即可 直接按ENTER键可忽略
修改时间。

set 设置环境变量

〔适用场合〕 设置声卡和路径等时用到

〔用 法〕 set [环境变量]=[字符串]

这条命令常常用在autoexec.bat中

〔例 子〕 C:\>set blaster=a220 i5 d1 设置声卡的参数

C:\>set path=c:\dos path c:\dos含义相同

smartdrv 设置磁盘加速器

〔建 议〕 它可以提高硬盘访问速度,最好在autoexec.bat文件中加载吧。

〔用 法〕 smartdrv /x

执行并驻留内存,开辟磁盘加速缓存区,并屏蔽所有驱动器缓存,是
较常用的方法(一般用这个命令就够了)

smartdrv /c 将缓存内的信息都写入硬盘

smartdrv /e: 数字 设置一次移动的信息量

smartdrv /b: 数字 设置预先读取的缓冲区大小
append 设置非执行文件的路径

〔适用场合〕 当您无法在多个目录中寻找到自己输入的文稿时,可以试一试这个命
令,用法类似path。

〔用 法〕 append [路径];[路径]

〔例 子〕 C:\>append c:\test�

设置寻找非可执行文件路径为c:\test如果该目录下有文件1.txt时,
在其它目录下调用1.txt找不到时,可自动寻找到c:\test目录。

D:\UCDOS>edit 1.txt 可找到C:\test.txt文件

debug 程序调试命令

〔建 议〕 如果你学过汇编语言,那你应该会使用debug,如果没学过,最好别
使用

〔用 法〕 debug [文件名]

diskcomp 比较磁盘

〔适用场合〕 比较两张盘是否相同,没想到什么时候会用到,在比较用diskcopy拷
贝的两张盘,为什么不用diskcopy/v校验呢?

〔用 法〕 diskcomp [盘符1] [盘符2] 比较盘1和盘2

diskcomp /1 只比较磁盘的第一面

diskcomp /8 只比较没磁道的前8个扇区

〔例 子〕 C:\>diskcomp a: a:
在同一软驱中比较两张盘

Insert FIRST diskette in drive A:
放入第一张盘

Press any key to continue . . .

Comparing 80 tracks 18 sectors per track, 2 side(s)
Insert SECOND diskette in drive A:
放入第二张盘

Press any key to continue . . . Compare OK
比较未发现不同

Compare another diskette (Y/N) ?n
是否比较其它盘,选y继续比较,选n停止
expand 解压工具

〔适用场合〕 微软公司软件原始安装盘中有许多后缀以"_"结尾的压缩文件,可以
用它解压,解除您因为少数几个文件丢失造成的麻烦。

〔用 法〕 expand [源文件名] [目的文件]

〔例 子〕 C:\>expand a:vsafe.co_ c:\dos\vsafe.com

� 解压vsafe.co_为vsafe.com文件

Microsoft (R) File Expansion Utility Version 2.10
Copyright (C) Microsoft Corp 1990-1993. All rights
reserved.

Expanding a:vsafe.co_ to c:\dos\vsafe.com. a:vsafe.co_:
33046 bytes expanded to 62576 bytes, 89% increase.

C:\DOS>

fasthelp 快速显示帮助信息

〔建 议〕 可以看
参考技术A 一般的DOS命令在后加上 /y
应该没有y/n提示了.
比如format c: /y
就不提示
还是研究一下各命令的参数比较实在..

我觉得本回答被提问者采纳

从 DOS 命令行关闭正在运行的应用程序

【中文标题】从 DOS 命令行关闭正在运行的应用程序【英文标题】:Close a running application from DOS command line 【发布时间】:2011-10-05 21:09:33 【问题描述】:

启动命令可以在批处理文件中启动像记事本这样的应用程序,如下所示:

start notepad
start "my love.mp3"

但是如何从命令行关闭正在运行的应用程序?我在搜索中找到了taskkill,但我认为这不是正确的命令,因为它不起作用——它说没有这样的文件。

如何关闭使用start 启动的应用程序?

【问题讨论】:

Niko 你运行的是什么版本的 Windows? 【参考方案1】:

Taskkill 是正确的。但是您必须终止播放文件的进程,而不是文件本身。从命令提示符中找出 mp3 文件的注册处理程序会有点棘手。

如果你知道它,那么你可以杀死那个进程。

这是一个脚本,它计算出已注册的 mp3 文件应用程序并终止任务:

@echo off
if not .%1==. goto show

:createtemp
set tempfile="%temp%\temp-%random%-%time:~6,5%.bat"
if exist %tempfile% goto :createtemp

reg query HKEY_CLASSES_ROOT\mp3file\shell\play\command\ > %tempfile%

for /F "skip=4 delims=> tokens=2 usebackq" %%e in (`type %tempfile%`) do call %0 %%e

del %tempfile% > nul
set tempfile=
set handler=
set teststring=
set offset=
set cmd=
goto end

:show
set handler=%2
set handler=%handler:~1,-1%
set /A offset=-1

:loop
set cmd=set teststring=%%handler:~%offset%%%
echo %cmd% > %tempfile%
call %tempfile%
if %teststring:~0,1%==\ goto complete
set /A offset=offset-1
goto loop

:complete
set /A offset=offset+1
set cmd=set handler=%%handler:~%offset%%%
echo %cmd% > %tempfile%
call %tempfile%
taskkill /IM %handler% > nul

:end

如果您将其保存为killmp3.bat 或其他名称,您可以在需要时调用它。当然要注意,如果程序已经在运行,正在做其他事情,无论如何它都会被关闭。

请注意,这在很大程度上取决于注册表中的条目是否将可执行路径包含在双引号中。如果你没有那个并且可执行文件名中有空格,它将失败。

您可以概括我的技术,以便能够传入文件扩展名(例如.mp3,您可以在注册表中查找类名mp3file,然后从那里找到处理程序。

采用您启动的文件的名称并从中计算出扩展名的更通用的解决方案在理论上是可行的,但要困难得多。对于notepad,您必须通过搜索所有可执行文件的路径等来弄清楚它是什么。

如果您创建了一个可以启动的极短 mp3 文件,这可能会更简单。根据程序,它可能会停止播放当前文件并切换到新文件,这几乎会立即结束并有效地停止播放。

【讨论】:

谢谢你。但是我怎么知道你能给我任何执行操作的示例批处理文件吗? 请告诉我如何使用 taskkill 杀死应用程序,比如记事本。我如何找到已注册的处理程序?执行此操作的任何命令 Erike 你能帮我一些忙吗?在我的 pc dos 命令中,它说 taskkill 命令无法识别如何更新 dos 中的命令?任何想法 @Niko 再次查看编辑。我评论了您的问题,询问您正在运行什么版本的 Windows。【参考方案2】:

输入taskkill /? 获取语法和一些示例。您要做的是使用您要杀死的程序的名称传递/IM 参数。例如:

TASKKILL /F /IM notepad.exe

将杀死notepad.exe。

TASKKILL /F /IM note*

将杀死所有以“note”开头的进程。

【讨论】:

以上是关于delphi中运行DOS命令问题的主要内容,如果未能解决你的问题,请参考以下文章

delphi 管道执行dos获得返回memo中的问题

delphi执行DOS命令

通过delphi执行DOS??

C++中如何同时运行俩个dos命令?

如何在dos环境下,依次运行2个命令?

dos命令小集合