【cmd】控制结构

前言

cmd提供了三个命令实现控制结构,if、 for、 goto,均与c等语言中有相似之处,但是又有差异。


正题

一.if

1. if [Not] ErrorLevel number command 等价于 if %ErrorLevle% gtr number command,一般用来判断上一个命令是否执行成功

2. if  [Not] exist filename/foldername command 判断是否存在指定文件/目录

3.if [Not] string1 == string2 判断string1与string2是否相等

else 语义与c等编程语言相同,为了书写的美观,可以写成这个样子

if condition (

    command

) else (

    command

}

如果开启了CmdExtension(参照“变量”那篇博客),则具有以下功能(默认开启CmdExtension):

4.if /i string1 oprator string2 command

oprator:

equ/neq 相等/不相等,配合/i表示忽略大小写

gtr/lss 大于/小于,将取出string1与string2中的数字字符连接为一个整数(依然有数据范围,不适宜大数比较),进行比较(无视小数点和负号)

gtq/lsq 大于等于/小于等于

5.if defined var command 判断var是否被定义

6. if cmdextversion number command  与errorlevel类似


二.for

1.for var in (set) do command var

在终端中用 %变量名 表示,在脚本中用 %%变量名 表示,%变量名对set中的元素进行遍历

2.for /L var in (start, step, end) do command 

var从start开始,每次增加step,直到var或者超过var为止(注意这个包含end,而在其他语言中往往包含头部不包含尾部)

3.for /R [目录] var in (set) do command

var遍历目录并遍历set,每次var将得到值目录下一级子文件+set中元素,当目录省去则默认为当前目录,例如:E盘下有两个文件夹folder1, folder2

for /R E:\ %i in (1 2 3) do echo %i

将会输出:

E:\folder1\1

E:\folder2\1

E:\folder1\2

E:\folder2\2

4.for /D var in (set*) do command

主要用于set为包含通配符的情况,将会筛选出其中的目录名

5.for /F ["eol=c skip=n delims=xxx tokens=x,y usebackq"] var in (filename/`command`/'string') do

主要用于set为文本文件名时,eol表示"endOfLine",即结尾的标志,默认为回车/换行符,delims表示分隔符,tokens:x,y,z,...表示要选的第n项,usebackq表示将获取的分词作为命令执行,后面的变量将会根据字典顺序确认变量名,例如

for /F "delims=, tokens=1,3,5"  %i in (test.csv) do echo %i %j %k %l %m %n

将会打印出test.csv的每行的第1,3,5项


三.goto

:label 

goto lebel将执行跳转到label处,某种意义上可以实现循环的break操作,在windows中break命令不可用


总结

  可以看到cmd对于控制语句的支持并不是很强(但是for /f参数绝对是强大无比),在运算方面的能力很弱,在遇到复杂的计算时需要编程语言来代劳,不过能够处理一些基本的操作。

在Windows系统中,如果你想通过一个.exe文件来控制命令提示符(CMD),你可以利用进程创建和通信的技术,比如`CreateProcess`函数或者第三方库如Pinvoke。以下是一个简单的步骤示例: 1. **使用C++**: - 使用`CreateProcess`函数可以启动一个新的CMD实例并传递命令行参数。例如,在C++中,你可以这样做: ```cpp #include <windows.h> STARTUPINFO si = {0}; PROCESS_INFORMATION pi; si.cb = sizeof(si); si.dwFlags = STARTF_USESHOWWINDOW; // 设置窗口模式 si.wShowWindow = SW_HIDE; // 隐藏窗口 if (CreateProcess(NULL, // 父进程名,这里是空,意味着当前进程 "cmd.exe", // 子进程要运行的程序路径 NULL, // 权限信息 NULL, // 用户权限信息 FALSE, // 是否继承父进程的句柄 CREATE_NEW_CONSOLE, // 进程属性 NULL, // 初始环境变量 NULL, // 运行位置 &si, // 启动信息结构 &pi)) { // 管道处理或其他操作... CloseHandle(pi.hThread); // 关闭子进程线程 WaitForSingleObject(pi.hProcess, INFINITE); // 等待子进程结束 CloseHandle(pi.hProcess); // 关闭子进程句柄 } ``` 2. **使用批处理(BAT)文件**: 创建一个`.bat`文件,其中包含你想要在CMD中执行的命令,然后在`.exe`中调用这个`.bat`文件。 3. **使用PowerShell脚本**: PowerShell也支持类似的功能,你可以编写一个`.ps1`脚本来控制CMD,然后用`Start-Process`命令执行它。 无论哪种方法,记住要在适当的地方添加错误处理和资源管理,以防止意外情况发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值