区分数字和字母(批处理)

时间:2013-06-04 16:36:56

标签: batch-file

我正在寻找一种在使用批处理脚本在Windows 7中读取用户帐户名时区分字母和数字的方法。例如,我想区分 User User1234 。目的是因为我使用帐户删除脚本删除旧帐户,但我只想删除那些包含数字的帐户。

我一直在研究这个问题,但我能找到的最接近的事情就是:http://www.dostips.com/?t=Experimental.StringDiff

另一种选择可能是能够读取用户名的最后4个,如果它们等于1-9,则将它们添加到删除组。我不知道该如何做到这一点,所以 - 再次 - 任何帮助都表示赞赏。

由于

4 个答案:

答案 0 :(得分:2)

@echo off
setlocal EnableDelayedExpansion

set user=User1234

set digitsInUser=
for /L %%i in (0,1,9) do (
    if "!user:%%i=!" neq "%user%" set digitsInUser=1
)

if defined digitsInUser (
    echo The user "%user%" have digits
)

答案 1 :(得分:1)

Windows shell Regex power

@echo off&setlocal
rem some testing
for %%i in (
    "User1234"
    "AAA111"
    "AAA"
    "111"
    "aaa"
    "a"
    "1"
    "me & you"
    "1 + 1"
    ""
    ) do (
  call:differentiate "%%~i"
  )
goto:eof

:differentiate "string"
set "String=%~1"
setlocal enabledelayedexpansion
echo("!string!"|findstr "^.[0-9][0-9]*.$" >nul&& echo "!string!": only numbers || echo "!string!": NOT all numbers
echo("!string!"|findstr "^.[a-z][a-z]*.$" >nul&& echo "!string!": only letters || echo "!string!": NOT all letters
echo(
endlocal
goto:eof

..输出是:

"User1234": NOT all numbers
"User1234": NOT all letters

"AAA111": NOT all numbers
"AAA111": NOT all letters

"AAA": NOT all numbers
"AAA": only letters

"111": only numbers
"111": NOT all letters

"aaa": NOT all numbers
"aaa": only letters

"a": NOT all numbers
"a": only letters

"1": only numbers
"1": NOT all letters

"me & you": NOT all numbers
"me & you": NOT all letters

"1 + 1": NOT all numbers
"1 + 1": NOT all letters

"": NOT all numbers
"": NOT all letters

答案 2 :(得分:1)

这是另一种选择。

@echo off
for /f "delims=" %%a in (user.txt) do (
 for /f "delims=0123456789" %%b in ("text-%%a") do (
   if not "text-%%a"=="%%b" (
      echo execute your routine here "%%a" has numbers
  )
 )
)

答案 3 :(得分:-3)

你想要的是一个正则表达式。您可以考虑使用PowerShell(或perl)重写您的脚本,如果您可以安装它。任何一个都是相对于坚持使用批处理文件的主要初始学习曲线,但它会随着时间的推移而大量回报。批处理文件中很多可怕的任务在“真正的”脚本语言中都是微不足道的,就像其中任何一种一样。