我有以下字符串
set str=aaaaa,bbbbb,ccccc,dddd
我需要替换从第一个,
(逗号)到字符串结尾的所有内容。但我不知道字符串是如何开始的。
我不能使用*通配符,因为它不在字符串的开头,所以像这样 -
set str=%str:,*=% >>>> Will not work
有什么想法吗?它必须是批处理脚本
答案 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!