我正在寻找一种在使用批处理脚本在Windows 7中读取用户帐户名时区分字母和数字的方法。例如,我想区分 User 和 User1234 。目的是因为我使用帐户删除脚本删除旧帐户,但我只想删除那些包含数字的帐户。
我一直在研究这个问题,但我能找到的最接近的事情就是:http://www.dostips.com/?t=Experimental.StringDiff
另一种选择可能是能够读取用户名的最后4个,如果它们等于1-9,则将它们添加到删除组。我不知道该如何做到这一点,所以 - 再次 - 任何帮助都表示赞赏。
由于
答案 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)
@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)重写您的脚本,如果您可以安装它。任何一个都是相对于坚持使用批处理文件的主要初始学习曲线,但它会随着时间的推移而大量回报。批处理文件中很多可怕的任务在“真正的”脚本语言中都是微不足道的,就像其中任何一种一样。