0

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

我已经研究了一段时间,但我能找到的最接近的东西在这里:http ://www.dostips.com/?t=Experimental.StringDiff

也许另一个选择是能够读取用户名的最后 4 个,如果它们等于 1-9,则将它们添加到删除组中。但是,我不确定如何执行此操作,因此 - 再次 - 感谢任何帮助。

谢谢

4

4 回答 4

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
)
于 2013-06-04T17:43:55.527 回答
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
  )
 )
)
于 2013-06-05T06:23:37.060 回答
1

Windows shell 正则表达式功能

@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”:并非所有数字
“User1234”:并非所有字母

“AAA111”:并非所有数字
“AAA111”:不是所有字母

“AAA”:并非所有数字
“AAA”:只有字母

“111”:只有数字
“111”:不是所有字母

“aaa”:不是所有数字
“aaa”:只有字母

“a”:不是所有数字
“a”:只有字母

“1”:只有数字
“1”:不是所有字母

“我和你”:不是所有的数字
“我和你”:不是所有的字母

“1 + 1”:不是所有数字
“1 + 1”:不是所有字母

"": 不是所有的数字
“”:不是所有的字母
于 2013-06-04T18:49:20.907 回答
-3

你想要的是一个正则表达式。您可能会考虑使用 PowerShell 或 perl 重写您的脚本,如果您可以安装它的话。与坚持使用批处理文件相比,任何一个都是主要的初始学习曲线,但随着时间的推移,它会得到丰厚的回报。批处理文件中可怕的许多任务在像其中任何一种这样的“真实”脚本语言中都是微不足道的。

于 2013-06-04T16:44:28.587 回答