![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-11 07:58 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 请帮我解释一下for语句中的delims=" ,谢谢 |
| 可打印版本 1,512 / 7 |
| 第1楼 26933062 | 发表于 2006-12-24 06:16 |
| 银牌会员 发帖 879 积分 2,268 | |
|
请帮我解释一下for语句中的delims=" ,谢谢 内容中的delims=这一句如果是delims=\" 我知道是以\作为分隔符,但它后面什么都没有是什么意思?百思不得其解.望高手解答,不盛感激,还请把红色部分都解释一下好吗?拜托了.
@echo off&setlocal EnableDelayedExpansion set a=1 for /f "delims=" %%i in ('dir /a-d/b/s *.txt') do ( if not "%%~ni"=="%~n0" ( ren "%%i" "%%~ni!a!%%~xi" set/a a+=1 ) ) |
|
| 第2楼 lxmxn | 发表于 2006-12-24 06:28 |
| 版主 发帖 4,938 积分 11,386 | |
|
Re 26933062 : for里面的delims指定分隔符,这里没有指定分隔符,就代表任何字符都不是分割符,再一想,就表示取一行的整个内容了,不管它里面有什么符号。 %%~ni,相关的见for的帮助命令,里面有。 |
|
| 第3楼 26933062 | 发表于 2006-12-24 06:36 |
| 银牌会员 发帖 879 积分 2,268 | |
|
lxmxn
先谢谢你解答, 如果这样那么我干脆不写它不就行了?象以下内容一样,会有什么不妥的吗? 我试了试,程序能正常运行,只是不知道会不会在某种其它环境下出问题. 还有就是红色部分,怎么只用单%号呢? @echo off&setlocal EnableDelayedExpansion set a=1 for /f %%i in ('dir /a-d/b/s *.txt') do ( if not "%%~ni"=="%~n0" ( ren "%%i" "%%~ni!a!%%~xi" set/a a+=1 ) ) |
|
| 第4楼 lxmxn | 发表于 2006-12-24 08:00 |
| 版主 发帖 4,938 积分 11,386 | |
|
Re 26933062 : 如果你去掉了delims选项,那么当文件含有空格等符号时,程序可能达不到你要的效果,甚至会出错。 红色部分的%~n0代表的是批处理自身的文件名,这样,这个批处理本身就不会被重命名。 |
|
| 第5楼 namejm | 发表于 2006-12-24 11:07 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
for /f 语句中,默认以空格或者制表符(也就是按tab键产生的8个空格的字符)为分隔符,如果不指定 delims 的值的话,就表示以空格或者制表符为分隔符。
|
|
| 第6楼 26933062 | 发表于 2006-12-24 13:12 |
| 银牌会员 发帖 879 积分 2,268 | |
|
感谢,长知识.
|
|
| 第7楼 earth123xinyuan | 发表于 2009-02-11 03:02 |
| 社区乞丐 发帖 25 积分 -46 来自 内蒙 | |
|
似懂非懂,慢慢学吧
|
|
| 第8楼 5yue5 | 发表于 2009-02-15 22:30 |
| 初级用户 发帖 34 积分 69 | |
|
12345 去看这里的实例
http://www.cn-dos.net/forum/viewthread.php?tid=46126&fpage=2 "delims=" 文本文件的内容for把它的每一行分成若干段。分段的符号叫定界符,系统默认是空格。 delims就是define limite定义界限的意思。"delims= "就是说定界是一空格符号把每行划分 为若干段。这是系统默认,此时可以不要delims=空格,也是一样的。如果这句改成delims=k,妈妈每行就按字母k划分为若干段。for默认只抓取每行的第一段进入内存,进行运算。 比如说*.txt的内容是 11 12 13 21 22 23 31 32 33 则for抓取的就是 11 21 31 特别注意 你这句里面for不会抓取整行的数据。只会抓取每行的第一段!如果你要让for抓取整行的 数据的话,你得添点破坏剂,就是 tokens=* ”%%~ni“ 这里n来自英文name即名字的意思。~符号代表删除双引号。所以 ”%%~ni“就是指把参数%%i读取的文件名加以拓广。如何拓广?比如说%%i 如果代表的是文件名123456.txt,那么%%~ni就代表: 123456 而%%~xi就代表: .txt(x就是extended扩展的意思) if not "%%~ni"=="%~n0" 就是:如果%%~ni 从%i获得的文件名字不等于 %~n0从%0获得的文件名字 (不含扩展名)则怎么怎么样。 [ Last edited by 5yue5 on 2009-2-15 at 22:56 ] |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |