![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-10 04:47 |
共 47,811 主题排行 / 349,897 发帖 / 今日 2 篇 / 48,255 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [求助]setlocal enabledelayedexpansion位置到底放哪最好? |
| 可打印版本 2,170 / 17 |
| 第1楼 terrytong | 发表于 2008-10-22 09:26 |
| 中级用户 发帖 115 积分 240 | |
|
[求助]setlocal enabledelayedexpansion位置到底放哪最好? 我有60000多个txt文件,他们的文件名可能含有特殊字符。现在我想把它们分成两部分,一部分是文件内容有字符串“-beijing”的,其他的算另外一部分。
开始想把setlocal enabledelayedexpansion放在最外面,但发现漏掉了几个特殊的文件名。所以把它放在了里面。但是不知道为什么K就不能累加了?怎么样才能让K也像n一样累加啊。 :start set n=0 set k=0 for /r E:\terry\test %%a in (*.txt) do ( set m=0 set /a n+=1 set tpath=%%~Fa set fname=%%~na setlocal enabledelayedexpansion for /f "tokens=1 delims=-" %%b in ('findstr /i "\-beijing" "!tpath!"') do ( set temp=%%b set /a m+=1 if !m! == 1 set /a K+=1&&echo !temp!>>E:\terry\beijing.txt&&move !tpath! E:\terry\beijing) cls echo totally scan !n! files echo totally find !k! beijing files endlocal ) |
|
| 第2楼 tireless | 发表于 2008-10-22 09:47 |
| 银牌会员 发帖 1,122 积分 2,025 | |
|
试试放到第一个 for 的下面一行。即:
for /r E:\terry\test %%a in (*.txt) do ( setlocal enabledelayedexpansion set m=0 |
|
| 第3楼 moniuming | 发表于 2008-10-22 09:57 |
| 银牌会员 发帖 574 积分 1,335 来自 广西 | |
|
if !m! == 1 set /a K+=1
如果!m!不等于1,那么K就没办法进行累加... |
|
| 第4楼 terrytong | 发表于 2008-10-22 10:04 |
| 中级用户 发帖 115 积分 240 | |
Originally posted by tireless at 2008-10-22 09:47: 不行啊,我试过了,像这种文件名'CV@A(31(2CPE.txt' 它会自动过滤掉@字符,但是如果把setlocal enabledelayedexpansion放在后面就没事.可是又不能K累加. |
|
| 第5楼 terrytong | 发表于 2008-10-22 10:06 |
| 中级用户 发帖 115 积分 240 | |
Originally posted by moniuming at 2008-10-22 09:57: 文件里有可能有很多-beijing这样的字符,所以只要找到一个就行,只要找到就累加.省得重复. |
|
| 第6楼 moniuming | 发表于 2008-10-22 10:52 |
| 银牌会员 发帖 574 积分 1,335 来自 广西 | |
|
我想应该是空格的问题,因为"!m! "(后面有一空格)不等于" 1"(前面有一空格),试试用引号括起来看看?如下:
if "!m!"=="1" ( set /a K+=1 echo !temp!>>E:\terry\beijing.txt move !tpath! E:\terry\beijing ) |
|
| 第7楼 terrytong | 发表于 2008-10-22 11:03 |
| 中级用户 发帖 115 积分 240 | |
Originally posted by moniuming at 2008-10-22 10:52: if !m! == 1 set /a K+=1&&echo !temp!>>E:\terry\beijing.txt&&move !tpath! E:\terry\beijing 这句执行了几千次,但是K就是在0和1间跳动. |
|
| 第8楼 moniuming | 发表于 2008-10-22 11:50 |
| 银牌会员 发帖 574 积分 1,335 来自 广西 | |
if !m! == 1 set /a K+=1&&echo !temp!>>E:\terry\beijing.txt&&move !tpath! E:\terry\beijing 你试过6楼的方法了吗 |
|
| 第9楼 terrytong | 发表于 2008-10-22 12:35 |
| 中级用户 发帖 115 积分 240 | |
Originally posted by moniuming at 2008-10-22 11:50: 试了下,还是一样K不会累加, 只会在1和0间变化,但是它后面的几句都能正常执行.执行完后好像K又会变为0,不知道是不是在setlocal enabledelayedexpansion 设置初始值的问题啊? [ Last edited by terrytong on 2008-10-22 at 12:38 ] |
|
| 第10楼 everest79 | 发表于 2008-10-22 13:01 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
换个角度
FINDSTR /I 指定搜索不分大小写。 /S 在当前目录和所有子目录中搜索匹配文件。 /M 如果文件含有匹配项,只打印其文件名。 findstr /i /s /m "-beijing" *.txt for /f "delims=" %%i in ('findstr /i /s /m "beijing" *.txt') do echo %cd%\%i |
|
| 第11楼 terrytong | 发表于 2008-10-25 13:36 |
| 中级用户 发帖 115 积分 240 | |
|
期待更多的高手过来看看啊,
除了K不能累加,其他都的能正常执行. |
|
| 第12楼 26933062 | 发表于 2008-10-25 14:19 |
| 银牌会员 发帖 879 积分 2,268 | |
|
不明白你的代码真正意图是什么?
当 m 等于 1 时 k累加? 仅解决你原代码 k 的累加问题。 |
|
| 第13楼 terrytong | 发表于 2008-10-25 14:45 |
| 中级用户 发帖 115 积分 240 | |
|
还是不行啊,
当 m 等于 1 时 k才累加,是因为有的txt里面有好几个-beijing.但是一个txt只需找到一个就好了.不需要截取重复的号码. 动行的结果还是和以前一样,当转到loop时K就是1,其它时就是0. [ Last edited by terrytong on 2008-10-25 at 15:03 ] 附件 baijing.JPG (44.34 KiB) |
|
| 第14楼 moniuming | 发表于 2008-10-25 15:21 |
| 银牌会员 发帖 574 积分 1,335 来自 广西 | |
|
试试这个?应该能解决k的问题,其它的代码自己弄.
现在才发图片,晕死,怎么可以是tokens=1呢!? [ Last edited by moniuming on 2008-10-25 at 15:48 ] |
|
| 第15楼 everest79 | 发表于 2008-10-25 15:28 |
| 金牌会员 发帖 1,127 积分 2,564 | |
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |