批量替换字符串没有FOR循环

时间:2013-01-14 10:49:23

标签: string batch-file for-loop replace

我有以下字符串

set str=aaaaa,bbbbb,ccccc,dddd

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

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

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

有什么想法吗?它必须是批处理脚本

2 个答案:

答案 0 :(得分: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之后的所有内容都被视为备注的一部分。

答案 1 :(得分:0)

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

@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!