用于删除字母字符的Windows脚本字符串操作

时间:2013-07-08 20:40:48

标签: windows string batch-file cmd

我是一名Linux人,正在尝试学习批处理脚本。

我有以下要求操纵字符串。

set string=1.23.10xxxx2

我想从上面的字符串中删除字母字符。

我需要输出为1.23.102或1.23.10,两个输出对我都没问题,有谁可以帮助我。

3 个答案:

答案 0 :(得分:3)

@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 :(得分:2)

如果格式具有一致的长度,那么您只需使用子字符串操作。

获得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 /?访问。

但我怀疑以上都不能满足你的需求。批量生成没有任何内容可以方便地搜索和替换字符范围。您可以使用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"

答案 2 :(得分:1)

您可以使用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%