中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-06 04:59
48,039 主题排行 / 350,124 发帖 / 今日 2 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » [已结]setlocal EnableDelayedExpansion 与 "!"
可打印版本  9,601 / 25
第1楼 kcdsw 发表于 2006-06-11 15:31
中级用户 发帖 179 积分 404
[已结]setlocal EnableDelayedExpansion 与 "!"
今天值班,实在无聊 cs被人菜,qq没人聊.想写bat也没绕过来 昏到在阵地上了
还望兄弟们指点
第2楼 namejm 发表于 2006-06-12 23:48
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  既然起用了变量延迟,为什么还要用%m%来引用呢?应该该成!m!才对啊。
第3楼 namejm 发表于 2006-06-13 13:31
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  我测试了一下下面的代码,它已经加了1了啊,你到底想让它变成多少呢?

  具体的代码有没有问题,因为你想要实现的功能不明了,我没去细看,但是至少是能够加1的,要不然你试试吧。

第4楼 kcdsw 发表于 2006-06-17 10:29
中级用户 发帖 179 积分 404
希望高手能给个思路! 谢谢
第5楼 bagpipe 发表于 2006-06-17 12:17
银牌会员 发帖 425 积分 1,144 来自 北京
setlocal EnableDelayedExpansion
set m=0
for /f "tokens=* delims=" %%m in ('findstr /v /C:"730 730" cover.ps') do (
if "!m!"=="686" (pause) else echo %%m >>cover3.txt
set /a m=!m!+1
)
pause
exit
不知道楼主想要什么样的效果,这个批处理没有什么错误的地方
第6楼 kcdsw 发表于 2006-06-17 13:28
中级用户 发帖 179 积分 404
是这个意思 如果一旦cover.ps中 含有感叹号的时候
会因为启用变量延迟 而造成这个感叹号不能被echo 到新文件中去
第7楼 bagpipe 发表于 2006-06-17 15:09
银牌会员 发帖 425 积分 1,144 来自 北京
@echo off
set m=0
for /f "tokens=*" %%m in ('findstr /v /C:"730 730" 2.txt') do (
setlocal EnableDelayedExpansion
set /a m=!m!+1
if "!m!"=="686" (pause) else setlocal DISABLEDELAYEDEXPANSION&&echo %%m>>test.txt
)
echo %m%

方法有点糙,不过这个问题有待考虑考虑了,楼主试试这个先
第8楼 kcdsw 发表于 2006-06-17 15:17
中级用户 发帖 179 积分 404
.....
F:\Print\blogcn订单\用户单\163>
setlocal EnableDelayedExpansion
set /a m=!m!+1
if "!m!" == "686" (pause) els
192.168.0.158\\BlogPrinting\\Sy
e\\CoverPage_BG.jpg) 1>>test.tx
)
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。

这是运行记录
第9楼 kcdsw 发表于 2006-06-17 15:18
中级用户 发帖 179 积分 404
而且感叹号 还是不见了
第10楼 bagpipe 发表于 2006-06-17 15:20
银牌会员 发帖 425 积分 1,144 来自 北京
看来重复调用会出现这个问题,不过行数如果少的话是可以的,我刚刚已经测试了,没有想到这个问题,在考虑考虑
第11楼 bagpipe 发表于 2006-06-17 15:21
银牌会员 发帖 425 积分 1,144 来自 北京
你的什么系统啊?我测试的是2000
第12楼 willsort 发表于 2006-06-17 15:22
元老会员 发帖 1,512 积分 4,432

───────────────── 版务记录 ─────────────────
执行:Will Sort
操作:移动主题:自 DOS疑難解答 & 問題討論(解答室)
说明:依照主题内容分类,更适合于发表在此版区
处罚:扣除因发表该主题而奖励的6点积分,版区违规惩罚性扣除2点积分
───────────────── 版务记录 ─────────────────


Re kcdsw:

首先,set/a有一套独立的变量识别机制,不需要使用!m!的形式延迟变量扩展,直接使用set /a m+=1 即可。而使用3楼中的 set /a m=%m%+1 反而会因为始终饮用初始化的变量,而出现无法持续递增的问题。

其次,关于文本中的!被转义的问题,解决办法仍然是关闭变量延迟并使用call,只是传递%%m时不再使用命令行参数,而是使用环境变量。如下:



[ Last edited by willsort on 2006-6-17 at 15:24 ]
第13楼 bagpipe 发表于 2006-06-17 15:33
银牌会员 发帖 425 积分 1,144 来自 北京
原来如此啊.......
第14楼 kcdsw 发表于 2006-06-17 15:38
中级用户 发帖 179 积分 404
泪流而....继续发帖


我传上来了


目的是在含有 730 730 这一行 通过它下一行的象素数据 重新计算它的宽度
ps: 730 730 为长宽值 但是原照片不是正方形 所以长宽比例错了 我想借用这个改成正确的 不想却出了篓子 把感叹号丢了

我的环境是 xp sp2 (oem正版)

[ Last edited by kcdsw on 2006-6-17 at 15:44 ]

附件
163.rar (14.39 KiB)
第15楼 kcdsw 发表于 2006-06-17 15:51
中级用户 发帖 179 积分 404
F:\Print\blogcn订单\用户单\163>if "17" == "day" call setp
此时不应有 <<。

F:\Print\blogcn订单\用户单\163>echo lineto/num num 1 sub def num 0 le{exit}if}lo
op}bd/EmptyDict <<>> def >>cover3.txt
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023