当字符串.bat出现时,如何在, TARO/文件中剪切这样的字符串?
Init., 12, TARO/ BLA BLA CDE
Ademanto, TARO/ BLA BLA XYZ之后我只想要Init., 12和Ademanto。
我不能在FOR中使用分隔符,因为它仅限于一个字符,对吗?
发布于 2016-02-13 20:47:06
这里有一个更健壮的解决方案,即使字符串包含引号或有毒字符,也应该工作--用新的行字符替换截止字符串。因为/F将迭代每个结果行,所以使用GOTO来脱离循环,只保留第一行。
@echo off
setlocal disableDelayedExpansion
set "string=;Init., 12, TARO/ BLA BLA CDE"
setlocal enableDelayedExpansion
set ^"string=!string:, TARO/=^
!^"
for /f delims^=^ eol^= %%A in ("!string!") do (
endlocal
set "string=%%A"
goto :break
)
:break
set string发布于 2016-02-13 17:18:32
set可以从开始到定义字符串,但不能从定义字符串到末尾。使用一个小技巧会有帮助:
setlocal enabledelayedexpansion
set "string=Init., 12, TARO/ BLA BLA CDE"
set "str=%string:*TARO/=TARO/%"
echo "!string:%str%=!"(将字符串的开始(包括分隔符-字符串(*TARO/) )替换为分隔符字符串(TARO/)。在第二步中,删除找到的字符串)
另一种方法是用单个字符分隔符替换分隔符-字符串(任何肯定不在字符串中的字符)。(下面这个奇怪的符号(þ)是一个chr(127),但您也可以使用@、#或其他不在字符串中的字符)。
for /f "delims=þ" %%i in ("%string:TARO/=þ%") do echo %%i发布于 2016-02-13 19:36:30
还有一条路。将, TARO/替换为&rem;。
@echo off
setlocal
set "str=Init., 12, TARO/ BLA BLA CDE"
set str=%str:, TARO/=&rem;%
echo %str%这是因为变量是在计算set命令之前展开的。因此,当行被评估时,它被评估为..。
set str=Init.,12&rem; BLAH BLAH CDE..。作为set var=value & rem (rest of line ignored)的复合命令
你也可以用echo %str:, TARO/=&rem;%来达到同样的效果。
https://stackoverflow.com/questions/35382760
复制相似问题