[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何判断输入的字符串是否是指定位数的纯数字

本帖最后由 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

评分人数

回复 18# pcl_test
感谢大师提醒,已完善。
1

评分人数

TOP

'&start Wscript -e:vbscript "%~0"
Set a=New RegExp
a.Pattern="^\d{48}$"
MsgBox a.Test(InputBox(""))

TOP

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

TOP

回复 8# happy886rr

如果超出位数会有点问题吧

TOP

本帖最后由 渣白 于 2017-4-3 11:30 编辑

回复 16# happy886rr


    不明白,怎么用做
可否给个小实例

TOP

回复 15# 渣白
用机器码做种子

TOP

回复 14# happy886rr


  这有弊端,我给别人授权了,他又发给别人。那不是一样?

TOP

回复 10# 渣白
因为你发的是授权过的bat,已经被追加了尾部授权,因此别人直接就能显示。建议发个未授权的bat过去。

TOP

回复 7# pcl_test


    负数和空格就错误啊,目标要求是48位纯数字

TOP

回复 11# 文哥


    兄弟 谢谢了

TOP

重新改了下,修复上次不是纯数字造成后面一直报不是纯数字

本帖最后由 文哥 于 2017-4-3 11:26 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. :a
  3. set /p a=
  4. for /f "delims=0123456789" %%a in ("%a%") do if not "%%a"=="" echo 不是纯数字&goto a
  5. for /l %%a in (1,1,49) do if "!a:~%%a,1!"=="" set b=%%a&goto b
  6. :b
  7. echo %b%
  8. if not "%b%"=="48" echo 不是48位
  9. goto a
复制代码

TOP

本帖最后由 渣白 于 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发给别人,别人为什么也可以显示。。。想加一个识别电脑是否授权

TOP

回复 4# 老刘1号


    搜索字符串太长

TOP

本帖最后由 happy886rr 于 2017-4-3 14:24 编辑

回复 6# 渣白
这么简单你还不会写吗
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :INPUT
  4. set/p a=请输入(48位数字):
  5. for /l %%i in (0,1,48) do (
  6. set/a "1!a:~%%i,1!1+1!a:~%%i,1!" 2>NUL || (
  7. echo;输入错误!请重新输入!
  8. goto :INPUT
  9. )
  10. )
  11. set/a "1/(1!a:~47,1!1-11)" 2>NUL || (
  12. echo;输入错误!请重新输入!
  13. goto :INPUT
  14. )
  15. set/a "1/(1!a:~48,1!1-11)" 2>NUL && (
  16. echo;输入错误!请重新输入!
  17. goto :INPUT
  18. )
  19. set/p=输入成功
复制代码
1

评分人数

TOP

返回列表