0 前言
在查找和Keil相关的插件过程中,无意间找到一个是基于bat脚本实现改变文件的可读属性的插件,原文链接。之前因为没有需求所以搁置了,最近心血来潮想着可以研究一下。于是仔细阅读了一下它的代码,发现也不是很复杂,于是在原来基础上迭代了一版。
1 先看成果
- 代码:
@echo off
if [%1] == [] ( ::如果没有输入参数, 即是处理项目下全部文件
attrib -A %1 /s
for /f %%a in ('attrib %1') do (
if "%%a"=="R" (attrib -R %1 /s && echo Unlocked) else (attrib +R %1 /s && echo Locked)
)
exit
)
for %%p in (%*) do ( ::遍历每个参数
::echo %%p
attrib -A "%%p"
for /f %%a in ('attrib "%%p"') do (
if "%%a"=="R" (attrib -R "%%p" /s && echo Unlocked) else (attrib +R "%%p" /s && echo Locked)
)
)
exit
-
keil中的配置:
-
更新:
最主要的还是新增了当前文件下的都一次性切换,因为原先的改变所有文件的可读属性是不分后缀的,而更新的这个改变当前文件下特定后缀的文件感觉更合适。当然,原先的改变所有文件的可读属性也保留了。
2 相关知识点
2.1 关于参数输入
之前的文章已经介绍了如何获取单个参数,使用的是%1 %2
这种,但是我想要实现遍历所有参数就不行了,也就是只能接收固定个数的参数,可扩展性不强。经过查找资料,发现可以使用%*
来表示所有参数,但是这里的所有参数就是从第一个参数开始后面的格式,所以参数之间是使用空格分隔的,这一点在for循环的时候需要注意,不能加/f
参数,因为只有一行。
2.2 单双引号
一开始下意识以为单双引号是一样的效果,即可以像python一样嵌套,但是实践发现,bat语法中只有双引号表示的是字符串,单引号就是一个普通的字符而已,
2.3 中括号的使用——判断输入参数是否为空
需要明确的是,原文中实现一次性改变所有文件的可读属性是通过给attrib
指令传递空路径来实现的,即处理当前路径下所有的文件。因此,就会存在一个问题,输入的参数要么是带引号的路径(因为怕路径有空格),要么是空,那怎么判断参数是空呢?
如果直接使用if "%*" == ""
,就会存在如果参数中也有引号这个语句就会报错,因此这里还缺少一个符号,通过参考这个链接,发现中括号也可以抵消掉空格的影响,因此可以这样使用:if [%*] == []
来判断输入参数是否为空。
2.3 keil中的符号含义