设置变量以替换括号和空格

时间:2018-02-07 23:45:33

标签: batch-file

我试图编写一个基本上可以替换像1 (1) --> x01y0120 (20) --> x20y20这样的字符串的批处理。所以我正在处理我已经拥有的另一个用户帮助我的批处理。我试图做像

这样的事情
SET OriginalName=!OriginalName:)=!
SET OriginalName=!OriginalName: (=y!

这至少会删除括号和空格,并留下我1y1和20y20,我会尝试添加其余的但我不知道如何处理括号和空格。我无法在here中找到答案。

2 个答案:

答案 0 :(得分:1)

此方法适用于所有情况,即使数字为1或2位数字:

@echo off
setlocal EnableDelayedExpansion

SET "OriginalName=1 (1)"

SET "aux=%OriginalName:)=%"
SET "aux=%aux:(=% "
SET "l=xy"
set "r=" & set /A "n=%aux: =+100" & set "r=!r!!l:~0,1!!n:~-2!" & set "l=!l:~1!" & set /A "n=%0"

echo %OriginalName% --^> %r%

输出示例:

1 (1) --> x01y01
20 (20) --> x20y20

该方法也可以轻松扩展以使用更多值。例如,要获得下面的结果,只需以这种方式修改l变量的值:SET "l=xyzt"

1 (20) 3 (40) --> x01y20z03t40

如果您想知道该方法的工作原理,只需删除@echo off行并查看即可!的 ;)

答案 1 :(得分:0)

确保在脚本的开头(或者至少在下面的脚本开头)有这个:

SETLOCAL EnableDelayedExpansion

如果第一个和第二个数字始终相同,请使用:

SET "num=!OriginalName:~,2!"
IF !num! LEQ 9 (
    SET "OriginalName=x0!OriginalName:)=!"
    SET "OriginalName=!OriginalName: (=y0!"
) ELSE (
    SET "OriginalName=x!OriginalName:)=!"
    SET "OriginalName=!OriginalName: (=y!"
)

输入:1 (1)20 (20)

输出:x01y01x20y20

如果第一个和第二个数字不总是相同,请使用:

SET "num_1=!OriginalName:~,2!"
IF !num_1! LEQ 9 (
    SET "OriginalName=x0!OriginalName:)=!"
) ELSE (
    SET "OriginalName=x!OriginalName:)=!"
)

SET "num_2=!OriginalName:~-2!"
IF !num_2! LEQ 9 (
    SET "OriginalName=!OriginalName: (=y0!"
) ELSE (
    SET "OriginalName=!OriginalName: (=y!"
)

输入:1 (20)20 (1)

输出:x01y20x20y01