我有以下字符串
set str=aaaaa,bbbbb,ccccc,dddd
我需要替换从第一个,
(逗号)到字符串结尾的所有内容。但我不知道字符串是如何开始的。
我不能使用 * 通配符,因为它不在字符串的开头,所以像这样 -
set str=%str:,*=% >>>> Will not work
有任何想法吗 ?它必须在批处理脚本中
我有以下字符串
set str=aaaaa,bbbbb,ccccc,dddd
我需要替换从第一个,
(逗号)到字符串结尾的所有内容。但我不知道字符串是如何开始的。
我不能使用 * 通配符,因为它不在字符串的开头,所以像这样 -
set str=%str:,*=% >>>> Will not work
有任何想法吗 ?它必须在批处理脚本中
有一个非常简单快速的解决方案可以避免 FOR 循环:使用搜索和替换在每个逗号处注入一个连接的 REM 命令:-)
@echo off
set str=aaaaa,bbbbb,ccccc,dddd
set "str=%str:,="&rem %
echo str=%str%
解释
在进行任何扩展之前,这是重要的代码行:
set "str=%str:,="&rem %
这是该行在变量扩展后转换为的内容:
set "str=aaaaa"&rem bbbbb"&rem ccccc"&rem dddd
它变成一个 SET 语句,然后是一个 REM 语句。运算符允许您在&
一行中组合多个命令。只有一个 REM 语句,因为第一个 REM 之后的所有内容都被视为备注的一部分。
要删除第一个逗号后的所有内容,您可以使用
@echo off
setlocal enabledelayedexpansion
set str=aaaaa,bbbbb,ccccc,dddd
for /f "delims=," %%a in ("%str%") do (
set str=%%a
echo !str!
)
pause >nul
要替换,只需将其剥离并在末尾附加新字符串
set str=%%a,new,string
更新
这将做同样的事情,但没有for
循环
@echo off
setlocal enabledelayedexpansion
set str=aaaaa,bbbbb,ccccc,dddd
set strip=%str%
set length=0
set start=0
set new=
:loop
if defined strip (
set strip=!strip:~1!
set /a length+=1
goto :loop
)
:comma
if %length% gtr 0 (
call :add !start!
if "!char!"=="," (
goto :break
) else (
set new=!new!!char!
set /a length-=1
set /a start+=1
goto comma
)
)
:break
echo %new%
pause >nul
:add
set char=!str:~%1,1!