1

我有以下字符串

set str=aaaaa,bbbbb,ccccc,dddd

我需要替换从第一个,(逗号)到字符串结尾的所有内容。但我不知道字符串是如何开始的。

我不能使用 * 通配符,因为它不在字符串的开头,所以像这样 -

set str=%str:,*=% >>>> Will not work

有任何想法吗 ?它必须在批处理脚本中

4

2 回答 2

3

有一个非常简单快速的解决方案可以避免 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 之后的所有内容都被视为备注的一部分。

于 2013-01-14T14:46:52.217 回答
1

要删除第一个逗号后的所有内容,您可以使用

@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!
于 2013-01-14T11:30:00.783 回答