求高手解释以下两句DOS批处理语句:
开头的的这两句
set $__ldir=%~f4\
set $__ldir=!$__ldir:\\=\!
怎么理解%~f4\和!$_ldir:\\=\!?
!$__ldir:\\=\!指把$__ldir变量值中双斜杠\\改成单斜杠\追问
太感谢啦!我只知道[%4%]是取第四个参数值,太菜了!那我再问下啊,
set $__ldir=%~f4\这句的\是必需的吗?不是必须的,它的作用是什么?
另外:set $__ldir=!$__ldir:\\=\!是变量延迟才这么引用变量吗?
就是获取脚本运行时后面添加的第四个参数值
然后赋值到$__ldir这个变量名上。
比如脚本运行参数如下
file.bat a b c d
这样在代码中就会获取到第四个参数值d
谢谢!别人给我一段代码,经你一解释我基本上就明白了,只是我还是有点不清楚。烦请你帮忙把你到底啊。
追答你说。
追问总是发送不成功啊,给你截个图吧
echo !$__ldir!
代表显示$__ldir的变量值内容,这个内容就是之前获取的。
dir /s/b/ad "!$__ldir!"
指的是列出$_ldir变量值中所有文件夹,包含子目录的。
谢啦。
for /f "delims=" %%z in ('dir /b /a-d "!$__lcp!" 2^>nul') do (
echo put "!$__lcp!%%z">>!$__ftpq!
)
这个for循环do语句之前那一堆又是干什么用的?
列出$_lcp变量值中的文件,不包含子目录。不包含文件夹。
追问能解释一下 谢啦。
功能开关/f 和"delims=" 以及in中最后那个 (2^>nul')分别是什么意思吗?
谢啦。能解释一下for功能开关/f 和"delims=" 以及in中最后那个 (2^>nul')分别是什么意思吗?
追答/f大概解释为列出内容和循环范围。
delims=是指用某些字符作为分隔符,这里没有设置。
2^>nul指的是有错误信息是不显示。由于用在了for命令的括号中所以加了一个^转义符对>进行转义,以便命令被正常识别。
2>nul指的是有错误信息时不显示,那么它和 dir /b /a-d "!$__lcp!是什么关系?它们俩结合在一起,还是一个集合吗?因为它们是in的作用对象啊…
追答结合起来就是在dir命令执行时如果出现错误信息就不显示那些信息。不加的话会有错误提示
这个2>nul可以用在很多命令后面。
不加上数字2就代表如果有显示正确信息的也不显示。
等同于屏蔽反馈信息。
你测试一下下面两个命令,你就知道怎么一回事了。
pause
pause>nul
太厉害了!佩服!
还有一个小细节我还是不太明白
追答谢谢夸奖,我还有很多不足的地方,仍需要努力学习。如果觉得我的回答不错,请给个采纳,如果还有问题,可以继续询问。
追问for /f "delims=" %%z in ('dir /b /a-d "!$__lcp!" 2^>nul')
这一句中 "delims="的双引号和 'dir /b /a-d "!$__lcp!" 2^>nul'的单引号都是必需的吧?有没有什么说法?
是的,如果()中是某个执行程序,那么单引号是必须的。
追问双引号呢?"!$__lcp!"和 "delims="是怎么回事?
追答delims那边必须的。
变量那边看情况,不过个人建议添加双引号。
你就是我的批处理启蒙老师,谢啦!
set $__rdir=/%5/
和 if [%5]==[] 都是对外来参数值的引用。
只是,一会儿是[ ],一会儿又是/ /,这种用法有什么区别吗?
我对这种符号很敏感,弄不清楚很不踏实…
追答那个只是一些字符,不是参数。
假设%5的值是a
那么$__rdir的变量值就是/a/
这时 if [/a/]==[]这样的比较就不成立了。
如果%5没有给定值,那么就是if []==[]这样前后是一模一样的内容,比较变成成立。
这里的/和[]你也可以换成其它符号。因为它们又不是参数,只是一个字符串而已。
追问太感谢你啦!知识渊博,耐心又好,超级赞!