繁体   English   中英

Windows脚本字符串操作以删除字母字符

[英]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 setset /?访问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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM