我有一个可以包含字符串和/或数字的变量,但在某些情况下我必须删除数字字符。所以我很基本;
if defined ARG2 (
for %%b in (0 1 2 3 4 5 6 7 8 9) do set ARG2=!ARG2:%%b=!
)
它几乎适用于所有情况,但存在问题。如果ARG2只包含数字字符,则会将ARG2值更改为9=
之类的值。我该如何解决这个问题,还是有更好的方法从变量中删除数字字符?
答案 0 :(得分:0)
输入888
时,for循环将达到8并删除字符串中的所有字符。因此,您有一个空变量。因此,当您尝试删除9时,它会扩展为空,然后由于某种原因(不完全确定原因)cmd不考虑字符串操作,只显示它(类似666
将输出{{1} } 等等)。要解决此问题,您只需添加一项检查,以查看7=
是否为空。
ARG2
如果if defined ARG2 (
for %%b in (0 1 2 3 4 5 6 7 8 9) do if "!ARG2!"=="" ( goto :break ) else set ARG2=!ARG2:%%b=!
)
:break
扩展为空,则会转到:break
标签。
这里的答案 - How does the Windows Command Interpreter (CMD.EXE) parse scripts? - 应该更好地解释原因。