求高手解释以下两句DOS批处理语句: 开头的的这两句 set $__ldir=%~f4\ set

求高手解释以下两句DOS批处理语句:
开头的的这两句
set $__ldir=%~f4\
set $__ldir=!$__ldir:\\=\!
怎么理解%~f4\和!$_ldir:\\=\!?

%~f4代表获取第四参数值的完整路径

!$__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 []==[]这样前后是一模一样的内容,比较变成成立。

这里的/和[]你也可以换成其它符号。因为它们又不是参数,只是一个字符串而已。

追问

太感谢你啦!知识渊博,耐心又好,超级赞!

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网