![Board logo](images/default/logo.gif)
标题: [文本处理] 批处理如何判断输入的字符串是否是指定位数的纯数字 [打印本页]
作者: 渣白 时间: 2017-4-2 21:43 标题: 批处理如何判断输入的字符串是否是指定位数的纯数字
本帖最后由 pcl_test 于 2017-4-2 23:15 编辑
关于set /p a= 的用法,不是很懂
我想用set /p "a=请输入48位数字:"
变量规定为 48位数字纯数字,无英文字母,无其他字符(空格,符号等)
纯数字无要求,可以0开头也可以重复,所以不用做任何规定
:loop
set /p "a=请输入48位数字:
set "a48=a:~48,1"
if %a48% neq ”“ echo 输入错误! goto loop
echo %a% | finldstr /i "A B C D E F G H I J K L N M O P Q R S T U V W X Y Z , . * / - + ! @ $ % ^ & * ( ) : " < > ? " echo 输入错误! &&goto loop
echo 输入成功!
pause >nul&&exit
这是我自己的想法
if %a48% neq ”“ echo 输入错误! goto loop 这一步错了。。。然后就没想懂
作者: 老刘1号 时间: 2017-4-2 21:56
本帖最后由 老刘1号 于 2017-4-2 22:23 编辑
2选1
另存为BAT- '&start Wscript -e:vbscript "%~0"
- a=inputbox("")
- if len(a) = 48 and IsNumeric(a) then
- wscript.echo "True"
- else
- wscript.echo "False"
- end if
复制代码
- '&start Wscript -e:vbscript "%~0"
- Set a=New RegExp
- a.Pattern="\b\d{48}\b"
- MsgBox a.Test(InputBox(""))
复制代码
作者: 渣白 时间: 2017-4-2 22:14
回复 2# 老刘1号
这个代码不是批处理?怎么在cmd里运行
作者: 老刘1号 时间: 2017-4-2 22:30
本帖最后由 老刘1号 于 2017-4-2 22:42 编辑
回复 3# 渣白
CMD直接运行不了
存Bat
或者:- Echo off&cls&setlocal ENABLEDELAYEDEXPANSION
- for /l %%a in (1,1,48) do set pattern=!pattern![0-9]
- Set/pa=
- echo !a!|Findstr "^%pattern%$" >nul && Echo True || Echo False
- Pause
复制代码
作者: /zhqsystem/zhq 时间: 2017-4-2 23:00
- @echo off&setlocal enabledelayedexpansion
- set /p "a=请输入48位数字: 注:如果闪退则是包含特殊字符或是超限字符:
- if defined a (
- set "#=!a!"
- (for /l %%n in (0,1,9)do set "#=%%n!#!"&&set "#=!#:%%n=!")>nul 2>nul
- if defined # (
- echo,非纯数字
- )else (
- set "n=0"
- for /l %%n in (0,1,8197)do if /i not "!a:~%%n,1!"=="" set/a "n=%%n+1"
- if /i "!n!"=="48" (
- echo,纯数字验证正确
- )else (
- echo,验证错误字符数:!n!
- )
- )
- )else (
- echo,直接回车了
- )
复制代码
作者: 渣白 时间: 2017-4-3 08:07 标题: 批处理实现对数字的限制
用 set /p number=请输入48位数字数字中间无空格
如果变量number有其他字符输出“输入错误!请重新输入!”
如果变量number不够48位输出“输入错误!请重新输入!”
怎么用代码实现
作者: pcl_test 时间: 2017-4-3 10:21
回复 2# 老刘1号
第一种,如果输入负数呢,如 -47个数字
第二种,如果有空格呢,如 a 48个数字 b
作者: happy886rr 时间: 2017-4-3 10:26
本帖最后由 happy886rr 于 2017-4-3 14:24 编辑
回复 6# 渣白
这么简单你还不会写吗- @echo off
- setlocal enabledelayedexpansion
-
- :INPUT
- set/p a=请输入(48位数字):
-
- for /l %%i in (0,1,48) do (
- set/a "1!a:~%%i,1!1+1!a:~%%i,1!" 2>NUL || (
- echo;输入错误!请重新输入!
- goto :INPUT
- )
- )
-
- set/a "1/(1!a:~47,1!1-11)" 2>NUL || (
- echo;输入错误!请重新输入!
- goto :INPUT
- )
-
- set/a "1/(1!a:~48,1!1-11)" 2>NUL && (
- echo;输入错误!请重新输入!
- goto :INPUT
- )
-
- set/p=输入成功
复制代码
作者: 渣白 时间: 2017-4-3 10:31
回复 4# 老刘1号
搜索字符串太长
作者: 渣白 时间: 2017-4-3 10:49
本帖最后由 渣白 于 2017-4-3 11:01 编辑
回复 8# happy886rr
谢谢老师
@echo off
call :check 2>nul
if defined key goto main
:pwd
cls
set /p input= 输入授权码
if not defined input goto pwd
if not "%input%"=="shouquanma" goto pwd
(echo;
echo;:check
echo;set key=123
echo;goto :eof
echo;
)>>%0
:main
echo;hello word
echo.&pause&exit
上面的代码 ,,我输入了shouquanma 显示了内容hello world 然后我把bat发给别人,别人为什么也可以显示。。。想加一个识别电脑是否授权
作者: 文哥 时间: 2017-4-3 10:54 标题: 重新改了下,修复上次不是纯数字造成后面一直报不是纯数字
本帖最后由 文哥 于 2017-4-3 11:26 编辑
- @echo off&setlocal enabledelayedexpansion
- :a
- set /p a=
- for /f "delims=0123456789" %%a in ("%a%") do if not "%%a"=="" echo 不是纯数字&goto a
- for /l %%a in (1,1,49) do if "!a:~%%a,1!"=="" set b=%%a&goto b
- :b
- echo %b%
- if not "%b%"=="48" echo 不是48位
- goto a
复制代码
作者: 渣白 时间: 2017-4-3 10:57
回复 11# 文哥
兄弟 谢谢了
作者: 渣白 时间: 2017-4-3 10:59
回复 7# pcl_test
负数和空格就错误啊,目标要求是48位纯数字
作者: happy886rr 时间: 2017-4-3 11:14
回复 10# 渣白
因为你发的是授权过的bat,已经被追加了尾部授权,因此别人直接就能显示。建议发个未授权的bat过去。
作者: 渣白 时间: 2017-4-3 11:21
回复 14# happy886rr
这有弊端,我给别人授权了,他又发给别人。那不是一样?
作者: happy886rr 时间: 2017-4-3 11:24
回复 15# 渣白
用机器码做种子
作者: 渣白 时间: 2017-4-3 11:28
本帖最后由 渣白 于 2017-4-3 11:30 编辑
回复 16# happy886rr
不明白,怎么用做
可否给个小实例
作者: pcl_test 时间: 2017-4-3 12:36
回复 8# happy886rr
如果超出位数会有点问题吧
作者: 老刘1号 时间: 2017-4-3 12:51
Echo off&cls&setlocal ENABLEDELAYEDEXPANSION
for /l %%a in (1,1,8) do set pattern=!pattern![0-9]
Set/pn=
For /l %%a in (1,1,6) do (
set /a tmp=8*%%a-8
Call echo %%n:~!tmp!,8%%|Findstr "^%pattern%$" >nul || Set bool=False
)
If "!bool!" Equ "False" (Echo !bool!) Else Echo True
Pause
123456789012345678901234567890123456789012345678
-12345678901234567890123456789012345678901234567
000000000000000000000000000000000000000000000000
1 3456789012345678901234567890123456789012345678
作者: 老刘1号 时间: 2017-4-3 12:51
'&start Wscript -e:vbscript "%~0"
Set a=New RegExp
a.Pattern="^\d{48}$"
MsgBox a.Test(InputBox(""))
作者: happy886rr 时间: 2017-4-3 14:27
回复 18# pcl_test
感谢大师提醒,已完善。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |