[英]Windows scripting string manipulation to remove alpha characters
我是Linux专家,正在尝试学习批处理脚本。
我对操纵字符串有以下要求。
set string=1.23.10xxxx2
我想从上面的字符串中删除字母字符。
我需要输出为1.23.102或1.23.10,两个输出对我来说都很好,谁能帮我。
@echo off
set remove=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
set string=1.23.10xxxx2
for /F "tokens=1,2 delims=%remove%" %%a in ("%string%") do (
echo Part before removed chars: %%a
echo Part after removed chars: %%b
echo Both parts: %%a%%b
)
如果格式的长度一致,那么您可以简单地使用子字符串操作。
要获得1.23.10:
set "string=%string:~0,7%"
要获得1.23.102:
set "string=%string:~0,7%%string:~-1%"
如果仅删除字符x
,则使用搜索并替换(始终不区分大小写):
set "string=%string:x=%"
以上所有内容均在帮助中进行了描述,可以通过help set
或set /?
访问set /?
。
但我怀疑以上都不满足您的需求。 批处理中没有内置内容可以方便地搜索和替换字符范围。 您可以使用FOR循环来迭代搜索和替换每个字母。 这需要延迟扩展,因为正常扩展是在解析时发生的,并且整个FOR构造都是一次解析的。
setlocal enableDelayedExpansion
for %%C in (
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
) do set "string=!string:%%C=!"
上面的方法有效,但是效率相对较低。
有许多第三方工具可以有效解决问题。 但是在某些环境中禁止使用非标准可执行文件。 我已经编写了一个名为REPL.BAT的混合批处理/ JScript实用程序,该实用程序非常适合此问题。 从XP开始,它可以在任何现代Windows计算机上使用。 单击链接以获取脚本。 脚本中内置了完整的文档。
假设REPL.BAT位于当前目录中,或者更好,位于PATH中的某个位置,则可以使用以下命令:
for /f "eol=a delims=" %%S in ('repl "[a-zA-Z]" "" s string') do set "string=%%S"
您可以使用GNUWin32 sed :
@ECHO OFF &SETLOCAL
set "string=1.23.10xxxx2"
FOR /f %%a IN ('echo %string% ^| sed "s/[a-zA-Z]\+//"') DO set "newstring=%%a"
ECHO %newstring%
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.