![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-23 18:05 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,274 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [已结] for语句里的变量参照怎么用? |
| 可打印版本 2,700 / 16 |
| 第1楼 zhaxi | 发表于 2006-06-23 20:06 |
| 初级用户 发帖 40 积分 112 | |
|
[已结] for语句里的变量参照怎么用? 学习DOS 3个月,自己在公司编写了一些小程序了,感觉很不错。可是一直以来郁闷的一个用法还不会,而且在网上搜索几个钟头,也找不到相关文章。我知道我问的这个问题对willsort你来说很容易,一定帮我解答啊。非常感谢了。
我想问的是:for语句里的变量参照是怎么用的。 %~I 展开删除任何前后引号 ("") 的 %I。 %~fI 将 %I 展开到完全合格的路径名。 %~dI 只将 %I 展开到驱动器号。 %~pI 只将 %I 展开到路径。 %~nI 只将 %I 展开到文件名。 %~xI 只将 %I 展开到文件扩展名。 %~sI 展开路径以只包含短名称。 %~aI 将 %I 展开到文件的文件属性。 %~tI 将 %I 展开到文件的日期和时间。 %~zI 将 %I 展开到文件大小。 比如我想取出 d:\temp\1.txt 的大小,怎么使用%~zI啊。 我发现用%~z0 只能取出 运行的那个bat文件的大小。哎。你一定帮我详细介绍下这些扩展变量怎么用的。多举几个For语句例子。 小弟我好想学会。 另外请教一下: 如果一个文件夹A和B。 我要判断出哪些文件是B里具有的而在A中却没有。 这个问题是我为了编一个更新程序工具要用的。 [ Last edited by zhaxi on 2006-6-28 at 19:43 ] |
|
| 第2楼 zhaxi | 发表于 2006-06-23 20:09 |
| 初级用户 发帖 40 积分 112 | |
|
虽然我说亲点版主 虽然我说亲点版主,可他可能不在 `-`
其他批处理 高手见了也希望能帮帮我啊。 多谢了。:D |
|
| 第3楼 wydos | 发表于 2006-06-23 21:35 |
| 中级用户 发帖 117 积分 304 | |
|
本人的理解是:
%I假如包含文件名和扩展名,用了%~nI,就可以把扩展名去掉.如果%I本身若只有文件名,%~nI将会出错. 这只是本人的粗略理解,仅供参考哦!! |
|
| 第4楼 arding | 发表于 2006-06-26 12:24 |
| 初级用户 发帖 38 积分 90 | |
|
for %%i in (dir d:\temp\1.txt) do echo %%~zi
|
|
| 第5楼 zhaxi | 发表于 2006-06-26 12:59 |
| 初级用户 发帖 40 积分 112 | |
|
多谢arding啊。哈哈你说的语句真的是对的。
我以前写成了for %%i in (d:\temp\1.txt) do echo %%~zi ,居然要加个DIR. 你能帮我把另外一个问题解决了吗? 如果两个文件夹A和B。 我要判断出哪些文件是B里具有的而在A中却没有。 |
|
| 第6楼 arding | 发表于 2006-06-26 13:13 |
| 初级用户 发帖 38 积分 90 | |
|
下面的批处理用于不同文件夹下的同名文件的比较,你可以改动 fc 的那一句,例如用exist 来判断相异的文件。
|
|
| 第7楼 GOTOmsdos | 发表于 2006-06-26 13:16 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
"我发现用%~z0 只能取出 运行的那个bat文件的大小"
%~z0 就是 具有附加功能~z0 的参数 %0 %0 代表BAT文件本身 如下是相关的一条 CMD 语句:(在BAT中,% 要用%%) for %a in (*.c) do @for %b in (*.cpp) do @if %~za==2242 @echo %~tb>>diff.log 如果 C后缀文件的大小等于2242,就显示CPP后缀文件的日期,并把结果写入diff.log |
|
| 第8楼 3742668 | 发表于 2006-06-26 13:38 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
你的标题不符合规范,请参照本版置顶贴自行更改,否则将酌情给予处罚。
如果两个文件夹A和B。 我要判断出哪些文件是B里具有的而在A中却没有... 参数1:源目录 参数2:目标目录 参数3:/r 指定该参数表示源目录包含子目录 参数4:/s 指定该参数表示目标目录包含子目录 |
|
| 第9楼 zhaxi | 发表于 2006-06-27 01:04 |
| 初级用户 发帖 40 积分 112 | |
|
非常感谢6-8楼的回复,使我又学到了一些知识。
to 6楼: 你写的这些语句暂时我还看不懂,哈哈。仔细研究几天再说。 to 7楼: 你很细心,我正好不明白%~z0 和%%是什么意思。 to 8楼: 你就是版主啊,一直没来回帖。 至于标题不规范,因为这是我首次发贴,没有意识。我已经改了不知道是不是正确格式。 你们都是dos高手啊,哎。佩服。 |
|
| 第10楼 willsort | 发表于 2006-06-27 01:18 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re zhaxi:
建议你再多看看置顶的版规和其中的关于提问和发帖的主题链接吧。 提问的第一要素,要让人清楚明白的知道你的问题是什么,这其中标题就是关键,在其中你应该尽量简短的文字尽量准确的说明你的问题,而不是使用“最难受”等富有感情却毫无内容的字眼。 另外,点名提问的行为会使被点名和不被点名的人都产生一定的反感,这属于提问的忌讳之一,所以在你修改标题之前,我未做任何的回复,就是希望你能意识到这个问题。 |
|
| 第11楼 zhaxi | 发表于 2006-06-28 12:55 |
| 初级用户 发帖 40 积分 112 | |
|
你的语句太有新意了。不过我今天拿出执行了一下,发现怎么把相同的文件记录都输入到list.txt里去了。我现在需要把那些在A里存在在B里不存在的文件找到。并且最好把他们的绝对或者相对路径也保存下来。
这样我才能根据这个list.txt里的记录去删除那些A里的垃圾文件。 版主你明白我说的吗?希望继续赐教。 --------------------------------------引用回复-------------------------- Quote: 如果两个文件夹A和B。 我要判断出哪些文件是B里具有的而在A中却没有... CODE: [Copy to clipboard] -------------------------------------------------------------------------------- @echo off pushd %1 for %3 %%i in (*.*) do dir %4 "%2\%%~nxi" >nul 2>nul && echo %%~nxi>>list.txt popd |
|
| 第12楼 3742668 | 发表于 2006-06-28 13:13 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
Sorry,没有仔细看你的要求,上面的代码只能列出两个目录都有的文件列表,不过要想修改成 A有B没有 其实也不难,只需要把for那一行中的 "&&" 替换为 "||" 即可。
至于相对路径,本版已经有过相关讨论。可以参考: 如何获得文件的上一层目录名字 |
|
| 第13楼 xiongwei2624 | 发表于 2006-06-28 14:45 |
| 初级用户 发帖 44 积分 96 来自 深圳 | |
|
感谢!
|
|
| 第14楼 zhaxi | 发表于 2006-06-28 19:41 |
| 初级用户 发帖 40 积分 112 | |
|
晕。只需要把 &&改成 || 就可以了啊。
不过我也忘记说明白点,A和B都是具有三级子文件夹的。所以我为了取出每个相同文件夹A中有B中没有的文件名列表,今天一天浪费了很长时间才写了个能实现此需求的程序,看起来比你的复杂的多。明天我把它发上来吧。 |
|
| 第15楼 zhaxi | 发表于 2006-06-28 21:12 |
| 初级用户 发帖 40 积分 112 | |
|
刚才电脑启动不了。出现提示: NTLDR is missing,.... press any key
我插了光盘进入故障恢复台, copy g:\i386\ntldr c:\ copy g:\i386\ntdetect.com c:\ 哈哈,居然成功进入了系统。不过发现启动菜单成了英文的拉。于是又把光盘里的bootfont.bin拷贝到了C盘,也解决了显示问题。 哈哈,首次体验批处理语句的快感! |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |