调用cmd(dos)命令详解

Run(@ComSpec & ” /c ” & ‘commandName’, “”, @SW_HIDE)

其实这样就行了,反正au3已经不支持98了:

Run(‘cmd /c commandName’, “”, @SW_HIDE)

最简单的例子:

Run(‘cmd /c pause’)

为什么要用单引号呢?请看:

Run(‘cmd /c start “” “C:\Program Files\”‘, “”, @SW_HIDE)

因为cmd命令经常要用到双引号。

1.关于“/c”

“/c”是干什么的啊?请运行:
Run(‘cmd /c cmd /?’ )

下面是cmd解释的一部分:

CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
[[/S] [/C | /K] string]

/C 执行字符串指定的命令然后终断
/K 执行字符串指定的命令但保留
/S 在 /C 或 /K 后修改字符串处理(见下)
/Q 关闭回应
/D 从注册表中停用执行 AutoRun 命令(见下)
/A 使向内部管道或文件命令的输出成为 ANSI
/U 使向内部管道或文件命令的输出成为 Unicode
/T:fg 设置前景/背景颜色(详细信息,请见 COLOR /?)
/E:ON 启用命令扩展(见下)
/E:OFF 停用命令扩展(见下)
/F:ON 启用文件和目录名称完成字符 (见下)
/F:OFF 停用文件和目录名称完成字符(见下)
/V:ON 将 ! 作为定界符启动延缓环境变量扩展。如: /V:ON 会
允许 !var! 在执行时允许 !var! 扩展变量 var。var 语法
在输入时扩展变量,这与在一个 FOR 循环内不同。
/V:OFF 停用延缓的环境扩展。

加了“/c”就是可以执行后面字符串的命令了,上面说的“cmd /c pause”你可以在“开始-运行”里执行,也可以用快捷方式执行,当然更可以在au3和vb等语言里执行了。

2.关于“/V:ON”

@echo off
setlocal enabledelayedexpansion & for /f "skip=3 tokens=1,2" %%i in ('tasklist') do set a= & set /p a=要终止%%i吗? & if !a!==y ntsd -c q -p %%j
pause

这是我过去用的强杀进程的方法,ntsd比taskkill厉害多了。在电脑僵死的时候我就用这个命令查找问题进程后杀掉。

setlocal enabledelayedexpansion是什么呢,就是延缓环境变量扩展,简单说就是可以在for等命令里可以使用!×!变量,如上例的!a!,用%a%是不行的,详细请参阅有关cmd方面的资料。

“/V:ON”也是一样的,也是为了执行字符串命令启动延缓环境变量扩展。上例变成单行命令就是:

cmd /V:ON/c @echo off&setlocal enabledelayedexpansion& for /f "skip=3 tokens=1,2" %i in ('tasklist') do set a= & set /p a=要终止%i吗?& if !a!==y  ntsd -c q -p %j

在桌面新建一个快捷方式,在目标项目里插入以上命令,设置快捷键为Shift+Alt+K

当电脑僵死时,大多数情况下快捷键还能用的,按下shift+Alt+K,找到问题进程,键入“Y”,回车,就可以Kill它了,如果能进入桌面,直接点击快捷方式也是可以的。因为简单直接所以也有效。

3.编写复杂的cmd单行命令

我总觉得有时调用com对象和api函数还不如用cmd方便简单,有的cmd比较复杂怎么变成单行以便引用呢?
可以用“&、&&、||

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容