中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]实例学习中遇到的SET用法的问题
作者:
标题: [已解决]实例学习中遇到的SET用法的问题 上一主题 | 下一主题
photonjl
新手上路





积分 8
发帖 6
注册 2010-9-30
状态 离线
『楼 主』:  [已解决]实例学习中遇到的SET用法的问题

近日开始学习批处理.从网上猎得程序一枚,本不胜心喜.奈何人在山中,望站中老马引领迷途.
  此程序指在修改文本文件的内容.输入需要替换的文字内容及被替换成的结果内容,对于其中的SET用法实在是无从琢磨.XP下的帮助没有实例说明,搜索也没有找到.困惑实多.无寻花问柳之心,实求柳暗花明之路.望高手解倒悬之苦.
@echo off
setlocal enabledelayedexpansion
set file=
set /p file= 请输入要操作的文件名称(包括扩展名):
set "file=%file:"=%"        ::[color=Red]此行不明白.是否是说将变量file中的字符"替换为空,用意何在.[/color]
for %%i in ("%file%") do set file=%%~fi     ::[color=Red]SET FILE=%%~FI是什么用法,SET的帮助信息中好像没有[/color]
set replaced=
set /p replaced= 请输入即将被替换的内容:
set all=
set /p all= 请输入替换字符串:
for /f "delims=" %%i in ('type "%file%"') do (
    set str=%%i
    set "str=!str:%replaced%=%all%!"    ::[color=Red]此行读不明白,叹号和若干%如何作用[/color]
    echo !str!>>"%file%"_tmp.txt
)
copy "%file%" "%file%"_bak.txt >nul 2>nul
move "%file%"_tmp.txt "%file%"
start "" "%file%"
[ Last edited by photonjl on 2010-10-3 at 17:29 ]

2010-10-2 13:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:  

批处理set命令学习笔记
http://bbs.bathome.net/viewthread.php?tid=3774#pid23888

批处理set命令使用详解
http://bbs.bathome.net/thread-57-1-1.html

批处理set命令截取字符详解
http://bbs.bathome.net/thread-996-1-1.html

批处理set命令变量字符截取点点通
http://bbs.bathome.net/thread-40-1-1.html

批处理新手set命令截取字符练习工具
http://bbs.bathome.net/thread-1149-1-1.html



2010-10-2 13:37
查看资料  发短消息 网志   编辑帖子  回复  引用回复
photonjl
新手上路





积分 8
发帖 6
注册 2010-9-30
状态 离线
『第 3 楼』:  

版主,不行哎,这句还是看不懂.初学,单独的格式内容能懂,一看组合的实际语句就晕了.
代码中的两个叹号是种固定格式还是运算符啊
set "str=!str:%replaced%=%all%!"  


2010-10-2 17:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 4 楼』:  

批处理中的变量延迟扩展、变量嵌套
http://bbs.bathome.net/thread-2899-1-1.html



2010-10-2 19:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
726842270
初级用户

枫中残雪


积分 65
发帖 43
注册 2010-4-29
来自 吉林省长春市
状态 离线
『第 5 楼』:  

因为你启用了
  SETLOCAL ENABLEDELAYEDEXPANSION(变量廷持)
所以用!来替代%
http://www.bathome.net/thread-1583-1-3.html
可以先看看

2010-10-2 20:43
查看资料  发送邮件  发短消息 网志  OICQ (726842270)  编辑帖子  回复  引用回复
photonjl
新手上路





积分 8
发帖 6
注册 2010-9-30
状态 离线
『第 6 楼』:  有点感觉了

看了这些天的资料,有点感觉,不能说豁然开朗,略开矛塞.
变量延迟扩展,个人的理解如下:

假设批处理同学手拿一本数学课本,正经历一道试题,题目为"X=5,Y=7,请翻到数学课本152页寻找X,Y的值,求解2X+5Y+Z=422中Z的值".

肯定不用问,批处理同学直接将X=5,Y=7代入求解.根本不去理会那句奇怪的"请翻到数学课本152页寻找X,Y的值"话.你要问批处理同学为什么,他肯定说,你傻啊,前面已给变量赋值了,还找什么找.对于批同学来说,直接去题目中读变量比找变量来的快.如果题目没有变量值呢?批同学自已就给变量赋值为0,然后计算下去.并且洋洋得意的说"咱们这叫预处理.只管快的,不管对的"

如何对付此类傻叉?只管取白绫三尺,磨好上等朱砂,上书"setlocal EnableDelayedExpansion"若干血腥大字,向批处理颈中套去,死命拉紧白绫两端,"你丫找变量还是自己写变量!!!!!!!!!!"


以上只是个小玩笑.感谢各位回帖帮助.

2010-10-3 17:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
nicyang86
新手上路





积分 2
发帖 2
注册 2010-10-10
状态 离线
『第 7 楼』:  比喻的形象生动,茅塞顿开,高人!

比喻的形象生动,茅塞顿开,高人!

2010-10-12 00:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: