【问题标题】:Batch - Check if variable contains characters other than numbers, letters and hyphens批处理 - 检查变量是否包含数字、字母和连字符以外的字符
【发布时间】:2018-05-05 08:08:39
【问题描述】:

我正在编写一个设置新计算机名称的脚本。语法是:

script.bat /NAME:<place new name here>

问题是,我不确定如何让我的脚本验证用户只输入了字母数字和连字符。所以,基本上,LENOVO-190 可以,但LENOVO:~19|0) 不行。此外,我喜欢将所有小写字母更改为大写字母,只是为了美观(我认为它看起来更好)。

我只希望我的脚本接受A-Z0-9-。如果输入了无效字符(比如说#),它会说类似“hey! # is not allowed!

谢谢大家,干杯。

【问题讨论】:

  • StackOverflow 不会按顺序编写脚本。您的任务是创建一个脚本,我们的任务是帮助解决由于其运行而导致的意外问题。
  • 请仔细阅读第一句话。
  • @ditheredtransparency,Compo 基本上要求查看您现有的代码以及您遇到问题的代码行。
  • @ditheredtransparency,我相信这就是你要找的answer

标签: batch-file computer-name


【解决方案1】:

现代版本的 Windows 有findstr,它有点像grep,因为它可以查找正则表达式的匹配项。您可以使用它来检查输入名称是否符合您的期望。例如:

C> echo abcde| findstr /r /i ^^[a-z][a-z0-9-]*$ && echo Good name! || echo Only letters, digits and hyphens, please!
abcde
Good name!

C> echo ab#de| findstr /r /i ^^[a-z][a-z0-9-]*$ && echo Good name! || echo Only letters, digits and hyphens, please!
Only letters, digits and hyphens, please!

至于如何在纯批处理中将小写字母替换为大写字母,there are ways

【讨论】:

  • 您正在使用/I 开关,因此您不需要在每个类中列出两次字母范围。
  • 酷,grep 的忠实粉丝。很高兴能够在 Windows 下使用类似的东西。多谢你们! @Squashman,我也对你链接到我的那篇帖子投了赞成票,因为它也有效。 :-)
  • @ditheredtransparency,我实际上是想将您与 rojo 在该问题中的答案联系起来,这与 Alex 在此处发布的问题相似。 Rojo 的回答会找到任何不是字母数字或连字符的字符,并告诉您它是无效的。亚历克斯是相反的,但条件逻辑是相反的,所以它们的工作方式相同。任何一种 findstr 方法都应该坚如磐石。
猜你喜欢
  • 2018-04-23
  • 1970-01-01
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 2012-12-27
  • 2017-11-02
相关资源
最近更新 更多