中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-10 17:21
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » 替换语句set str=!str:★*=! 为什么失败?
可打印版本  751 / 4
第1楼 lqh123108 发表于 2008-11-27 16:20
初级用户 发帖 24 积分 30
替换语句set str=!str:★*=! 为什么失败?
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('set') do (
set str=%%i
set str=!str:windows\=☆!
set str=!str:\cmd=★!
set str=!str:*☆=!
set str=!str:★*=!
echo !str!
pause
)
pause


::ComSpec=C:\WINDOWS\system32\cmd.exe

能够顺利删除白星号前面的内容

::本来想到 system32 可结果总是得到 system32★.exe

为什么这句无法执行,即删除黑星号后面的内容



转移自 DOS疑难解答 & 问题讨论 (解答室)
今后发帖请尽量发到对应的版块。
——管理员
第2楼 wxcute 发表于 2008-11-27 17:11
中级用户 发帖 211 积分 458

第一句:set str=!str:*☆=!
是把 * 号当作通配符,作用是把变量 str 中第一个 ☆ 及其前面的字符替换为空。

第二句:set str=!str:★*=!
是把 ★* 合看作一个字符串 “★*”,作用是把变量中的这个字符串替换为空。
因为上面的 str 变量中不会出现 “★*” 字符串,所以替换失败。
第3楼 lqh123108 发表于 2008-11-27 17:14
初级用户 发帖 24 积分 30
先谢了

不过搞不懂,

为什么白星号前面的*是通配符,黑星号后面的不是通配符

有什么办法将黑星号后面的内容也替换成空呢?

再谢了.
第4楼 wxcute 发表于 2008-11-27 17:29
中级用户 发帖 211 积分 458

一、这跟 ☆ 是没有关系的,* 号放在字符串前面就会把该字符串及其前面的所有字符一同进行替换。
如上面的例子,set a=%a:*cd=% 会把字符串 “cd” 及前面的 “ab” 一起替换为“空”。

二、要替换★及其后面的内容
可以利用中间变量

或是用 FOR

[ Last edited by wxcute on 2008-11-27 at 17:32 ]
第5楼 HAT 发表于 2008-11-27 17:46
版主 发帖 5,017 积分 9,023
Re 4楼
如果要完全满足楼主的需求,可能还要考虑的更加全面一些:
一行字符串里面可能同时包含多个★
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023