中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]setlocal EnableDelayedExpansion 与 "!"
« [1] [2] »
作者:
标题: [已结]setlocal EnableDelayedExpansion 与 "!" 上一主题 | 下一主题
kcdsw
中级用户





积分 404
发帖 179
注册 2006-3-30
状态 离线
『楼 主』:  [已结]setlocal EnableDelayedExpansion 与 "!"

今天值班,实在无聊 cs被人菜,qq没人聊.想写bat也没绕过来  昏到在阵地上了
还望兄弟们指点
setlocal EnableDelayedExpansion
set m=0
for /f "tokens=*" %%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
如果使用set 再echo 那么文本中的%会被替换掉.  
如果使用call,而不启用变量延迟,将for的%%m传递给call的时候同样会丢失东西
所以我还是启用了变量延迟,所造成的结果就是! 都不见了 希望高手赐教

[ Last edited by willsort on 2006-6-20 at 11:37 ]

   此帖被 -8 点积分      点击查看详情   


2006-6-11 15:31
查看资料  发短消息 网志   编辑帖子
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 2 楼』:  

  既然起用了变量延迟,为什么还要用%m%来引用呢?应该该成!m!才对啊。

   此帖被 +1 点积分    点击查看详情   
评分人:【 wenqs27 分数: +1  时间:2009-1-17 15:41


2006-6-12 23:48
查看资料  发短消息 网志   编辑帖子
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 3 楼』:  

  我测试了一下下面的代码,它已经加了1了啊,你到底想让它变成多少呢?

  具体的代码有没有问题,因为你想要实现的功能不明了,我没去细看,但是至少是能够加1的,要不然你试试吧。
@echo off
setlocal EnableDelayedExpansion
set m=0
for /f "tokens=*" %%m in ('findstr /v /C:"730 730" cover.ps') do (

    if %m%[ == 686[ (pause) else (echo %%m >>cover3.txt)
set /a m=%m% + 1
echo !m!   
)

pause
exit


2006-6-13 13:31
查看资料  发短消息 网志   编辑帖子
kcdsw
中级用户





积分 404
发帖 179
注册 2006-3-30
状态 离线
『第 4 楼』:  

希望高手能给个思路!  谢谢

2006-6-17 10:29
查看资料  发短消息 网志   编辑帖子
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 5 楼』:  

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
不知道楼主想要什么样的效果,这个批处理没有什么错误的地方

2006-6-17 12:17
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子
kcdsw
中级用户





积分 404
发帖 179
注册 2006-3-30
状态 离线
『第 6 楼』:  

是这个意思  如果一旦cover.ps中 含有感叹号的时候
会因为启用变量延迟 而造成这个感叹号不能被echo 到新文件中去

2006-6-17 13:28
查看资料  发短消息 网志   编辑帖子
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 7 楼』:  

@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%

方法有点糙,不过这个问题有待考虑考虑了,楼主试试这个先

2006-6-17 15:09
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子
kcdsw
中级用户





积分 404
发帖 179
注册 2006-3-30
状态 离线
『第 8 楼』:  

.....
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 递归层。

这是运行记录

2006-6-17 15:17
查看资料  发短消息 网志   编辑帖子
kcdsw
中级用户





积分 404
发帖 179
注册 2006-3-30
状态 离线
『第 9 楼』:  

而且感叹号 还是不见了

2006-6-17 15:18
查看资料  发短消息 网志   编辑帖子
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 10 楼』:  

看来重复调用会出现这个问题,不过行数如果少的话是可以的,我刚刚已经测试了,没有想到这个问题,在考虑考虑

2006-6-17 15:20
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 11 楼』:  

你的什么系统啊?我测试的是2000

2006-6-17 15:21
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 12 楼』:  


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


Re kcdsw:

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

      其次,关于文本中的!被转义的问题,解决办法仍然是关闭变量延迟并使用call,只是传递%%m时不再使用命令行参数,而是使用环境变量。如下:
@echo off
set m=0
for /f "tokens=*" %%m in ('findstr /v /C:"730 730" cover.ps') do (
    set line=%%m
    call :Output
    set /a m+=1
)
pause
exit

:Output
if "%m%" == "686" (pause) else (echo %line% >>cover3.txt)
goto :eof
[ Last edited by willsort on 2006-6-17 at 15:24 ]



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-6-17 15:22
查看资料  发送邮件  发短消息 网志   编辑帖子
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 13 楼』:  

原来如此啊.......

2006-6-17 15:33
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子
kcdsw
中级用户





积分 404
发帖 179
注册 2006-3-30
状态 离线
『第 14 楼』:  

泪流而....继续发帖


我传上来了


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

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

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

附件 1: 163.rar (2006-6-17 15:39, 14.39 K, 下载附件所需积分 1 点 ,下载次数: 52)
2006-6-17 15:38
查看资料  发短消息 网志   编辑帖子
kcdsw
中级用户





积分 404
发帖 179
注册 2006-3-30
状态 离线
『第 15 楼』:  

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

2006-6-17 15:51
查看资料  发短消息 网志   编辑帖子
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: