我是一个 Linux 人,正在尝试学习批处理脚本。
我有以下要求来操作字符串。
set string=1.23.10xxxx2
我想从上面的字符串中删除字母字符。
我需要输出为 1.23.102 或 1.23.10,这两个输出对我来说都很好,谁能帮帮我。
我是一个 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 /?
。
但我怀疑以上都不能满足您的需求。批处理中没有内置任何内容来方便地搜索和替换字符范围。您可以使用 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%