dos批处理变量内容替换的问题

两个问题:1.setb=%a:good=best%(替换不区分大小写,如何才能区分大小写)2.setb=%a:*good=%(可以删除掉第一个good及其之前的所有字符,... 两个问题:
1. set b=%a:good=best%
(替换不区分大小写,如何才能区分大小写)
2. set b=%a:*good=%
(可以删除掉第一个good及其之前的所有字符,功能是得到第一个good之后的
所有字符,如何才能实现另一个功能——删除掉第一个good及其之后的所有字符,而得到第一个good之前的所有字符)

就这两个问题,谢谢
展开
 我来答
yyykkkyyyy
2011-09-24 · TA获得超过3136个赞
知道大有可为答主
回答量:2691
采纳率:40%
帮助的人:3266万
展开全部
两个问题都没有简单命令可解决,只能是适当“编程”。
第1个,确实变量的取舍替换里,查找时是不分大小写的。如果能确定要替换的字符串不是大写的和小写的都同时存在,那么可以先用find或findstr查找一下,比如只换小写的
echo %a%|find "good">nul&&set b=%a:good=best%
如果不能确定,那就比较麻烦了,但用批处理总还是可以解决的,如果你想不到解决办法可再Hi我
第2个 稍有转折,不难解决:比如整串你能取得后半串,那么要前半串,从整串里去掉后半串就得到前半串了,这里面只是有一个问题,就是变量里想去掉另一变量代表的部分,如果写成类似:
set c=%a:%b%=% 是不行的,要么先设置变量延迟扩展setlocal enabledelayedexpansion
然后外侧的%符换成! 即类似 set c=!a:%b%=!
还可以不设置变量延迟扩展,用时外侧的%符写成双的再多加个call 类似:call set c=%%a:%b%=%%
漆海冬X4
2011-09-25 · TA获得超过371个赞
知道小有建树答主
回答量:579
采纳率:0%
帮助的人:251万
展开全部

/A 命令行开关指定等号右边的字符串为被评估的数字表达式。该表达式
评估器很简单并以递减的优先权顺序支持下列操作:

() - 分组
! ~ - - 一元运算符
* / % - 算数运算符
+ - - 算数运算符
<< >> - 逻辑移位
- 按位“与”
^ - 按位“异”
| - 按位“或”
= *= /= %= += -= - 赋值
&= ^= |= <<= >>=
, - 表达式分隔符

如果您使用任何逻辑或取余操作符, 您需要将表达式字符串用
引号扩起来。在表达式中的任何非数字字符串键作为环境变量
名称,这些环境变量名称的值已在使用前转换成数字。如果指定
了一个环境变量名称,但未在当前环境中定义,那么值将被定为
零。这使您可以使用环境变量值做计算而不用键入那些 % 符号
来得到它们的值。如果 SET /A 在命令脚本外的命令行执行的,
那么它显示该表达式的最后值。该分配的操作符在分配的操作符
左边需要一个环境变量名称。除十六进制有 0x 前缀, 八进制
有 0 前缀的,数字值为十进位数字。因此, 0x12 与 18 和 022
相同。请注意八进制公式可能很容易搞混: 08 和 09 是无效的数字,
因为 8 和 9 不是有效的八进制位数。

/P 命令行开关允许将变量数值设成用户输入的一行输入。读取输入
行之前,显示指定的 promptString。promptString 可以是空的。

环境变量替换已如下增强:

%PATH:str1=str2%

会扩展 PATH 环境变量,用 "str2" 代替扩展结果中的每个 "str1"。
要有效地从扩展结果中删除所有的 "str1","str2" 可以是空的。
"str1" 可以以星号打头;在这种情况下,"str1" 会从扩展结果的
开始到 str1 剩余部分第一次出现的地方,都一直保持相配。

也可以为扩展名指定子字符串。

%PATH:~10,5%

会扩展 PATH 环境变量,然后只使用在扩展结果中从第 11 个(偏
移量 10)字符开始的五个字符。如果没有指定长度,则采用默认
值,即变量数值的余数。如果两个数字(偏移量和长度)都是负数,
使用的数字则是环境变量数值长度加上指定的偏移量或长度。

%PATH:~-10%

会提取 PATH 变量的最后十个字符。

%PATH:~0,-2%

会提取 PATH 变量的所有字符,除了最后两个。

终于添加了延迟环境变量扩充的支持。该支持总是按默认值被
停用,但也可以通过 CMD.EXE 的 /V 命令行开关而被启用/停用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sudoku52
2011-09-25 · TA获得超过7万个赞
知道大有可为答主
回答量:1.2万
采纳率:82%
帮助的人:4777万
展开全部
1. set进行字符串截取是不分大小写的。2楼的方法正解。
echo %a%|find "good">nul&&set b=%a:good=best%
2. set进行字符串截取同样也不支持正则。可以用批处理变通处理
set b=%a:good=☆%
for /f "tokens=1* delims=☆“ %%i in ('echo %a%') do set b=%%j
set b=%b:☆=good%
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shaicu17
2011-09-24 · TA获得超过185个赞
知道答主
回答量:437
采纳率:0%
帮助的人:239万
展开全部
命令行开关允许将变量数值设成用户输入的一行输入。读取输入行之前,显示指定的 promptString。promptString 可以是空的。 环境变量替换已如下增强: %PATH:str
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式