中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-15 14:37
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]实例学习中遇到的SET用法的问题 查看 1,055 回复 6
楼 主 [已解决]实例学习中遇到的SET用法的问题 发表于 2010-10-02 13:03 ·  中国 广东 广州 电信
新手上路
积分 8
发帖 6
注册 2010-09-30 22:18
UID 175142
性别 男
状态 离线
近日开始学习批处理.从网上猎得程序一枚,本不胜心喜.奈何人在山中,望站中老马引领迷途.
此程序指在修改文本文件的内容.输入需要替换的文字内容及被替换成的结果内容,对于其中的SET用法实在是无从琢磨.XP下的帮助没有实例说明,搜索也没有找到.困惑实多.无寻花问柳之心,实求柳暗花明之路.望高手解倒悬之苦.


@echo off
setlocal enabledelayedexpansion
set file=
set /p file= 请输入要操作的文件名称(包括扩展名):
set "file=%file:"=%" ::此行不明白.是否是说将变量file中的字符"替换为空,用意何在.
for %%i in ("%file%") do set file=%%~fi ::SET FILE=%%~FI是什么用法,SET的帮助信息中好像没有
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%!" ::此行读不明白,叹号和若干%如何作用
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 ]
2 发表于 2010-10-02 13:37 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
批处理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
3 发表于 2010-10-02 17:28 ·  中国 广东 广州 电信
新手上路
积分 8
发帖 6
注册 2010-09-30 22:18
UID 175142
性别 男
状态 离线
版主,不行哎,这句还是看不懂.初学,单独的格式内容能懂,一看组合的实际语句就晕了.
代码中的两个叹号是种固定格式还是运算符啊

set "str=!str:%replaced%=%all%!"
4 发表于 2010-10-02 19:31 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
批处理中的变量延迟扩展、变量嵌套
http://bbs.bathome.net/thread-2899-1-1.html
5 发表于 2010-10-02 20:43 ·  中国 吉林 长春 电信
初级用户
枫中残雪
积分 65
发帖 43
注册 2010-04-29 23:20
UID 165810
性别 男
来自 吉林省长春市
状态 离线
因为你启用了
SETLOCAL ENABLEDELAYEDEXPANSION(变量廷持)
所以用!来替代%
http://www.bathome.net/thread-1583-1-3.html
可以先看看
6 有点感觉了 发表于 2010-10-03 17:28 ·  中国 广东 广州 电信
新手上路
积分 8
发帖 6
注册 2010-09-30 22:18
UID 175142
性别 男
状态 离线
看了这些天的资料,有点感觉,不能说豁然开朗,略开矛塞.
变量延迟扩展,个人的理解如下:

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

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

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


以上只是个小玩笑.感谢各位回帖帮助.
7 比喻的形象生动,茅塞顿开,高人! 发表于 2010-10-12 00:35 ·  中国 广东 深圳 罗湖区 电信
新手上路
积分 2
发帖 2
注册 2010-10-10 13:25
UID 175620
性别 男
状态 离线
比喻的形象生动,茅塞顿开,高人!
论坛跳转: