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

Batch file 设置变量以替换括号和空格,batch-file,Batch File,我试图编写一个批处理,它基本上可以替换字符串,如1(1)-->x01y01或20(20)-->x20y20。因此,我正在处理另一个用户帮助我处理的批处理。我试着做一些类似的事情 SET OriginalName=!OriginalName:)=! SET OriginalName=!OriginalName: (=y! 这至少会删除括号和空格,留下1y1和20y20,我会尝试添加其余的,但我不知道如何处理括号和空格。我在中找不到答案。请确保在脚本开头(或至少在下面的脚本开头)有以下内容: 如

我试图编写一个批处理,它基本上可以替换字符串,如
1(1)-->x01y01
20(20)-->x20y20
。因此,我正在处理另一个用户帮助我处理的批处理。我试着做一些类似的事情

SET OriginalName=!OriginalName:)=!
SET OriginalName=!OriginalName: (=y!

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

请确保在脚本开头(或至少在下面的脚本开头)有以下内容:


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

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!"
)
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(1)
20(20)

输出:
x01y01
x20y20


如果第一个数字和第二个数字并不总是相同,则使用以下方法:

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!"
)
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)


输出:
x01y20
x20y01

此方法适用于所有情况,即使数字为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
变量的值:
设置“l=xyzt”


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

您应该阅读、阅读和阅读。您的代码示例不符合MCVE的条件。另外,非常确定这个问题在这里已经被多次回答了……如果必须使用bang分隔符,那么至少在脚本中启用延迟扩展。MCVE还记得吗?我决定使用这个,因为我的批已经启用了延迟扩展,就像@jwdonahue提到的那样。我只需将
SET“num_2=!OriginalName:~-3!”
更改为
SET“num_2=!OriginalName:~-2!
,因为我在
1(1)
1(10),1(11)之间遇到了冲突,等
。现在它似乎运行得很好。我感谢您的帮助。我很喜欢它产生一致的两位数输出的方式。@FatalBulletHit,您应该用Daniel的修复更新您的答案,并添加延迟的扩展。这将是一个有价值的答案。@jwdonahue有趣的是,如果我没有弄错的话,他已经使用了我帮助他解决的一批问题所述批处理包括
SETLOCAL EnableDelayedExpansion
,但我将添加它以供以后使用……;)