标题: [数值计算] [已解决]生成10个正向或者反向的序列号生成器的批处理怎样简化? [打印本页]
作者: thp2008 时间: 2022-10-29 00:05 标题: [已解决]生成10个正向或者反向的序列号生成器的批处理怎样简化?
我自已写个很笨的,生成10个正向或者反向的序列号生成器。复制代码
比如,我输入: BBC3308Y289263
正向的结果:
BBC3308Y289263
BBC3308Y289264
BBC3308Y289265
BBC3308Y289266
BBC3308Y289267
BBC3308Y289268
BBC3308Y289269
BBC3308Y289270
BBC3308Y289271
BBC3308Y289272
反向的结果:
BBC3308Y289263
BBC3308Y289262
BBC3308Y289261
BBC3308Y289260
BBC3308Y289259
BBC3308Y289258
BBC3308Y289257
BBC3308Y289256
BBC3308Y289255
BBC3308Y289254
我试用后发现“反向”只要最后两位大于09,就不会出错,但是如果最后两位小于09,就会变成负数,出错。请问这种情况要怎么处理。
比如,我输入:BBC3308Y289203
结果就变成下面这样了。
BBC3308Y289203
BBC3308Y289202
BBC3308Y289201
BBC3308Y289200
BBC3308Y28920-1
BBC3308Y28920-2
BBC3308Y28920-3
BBC3308Y28920-4
BBC3308Y28920-5
BBC3308Y28920-6
正确的结果应该是:
BBC3308Y289203
BBC3308Y289202
BBC3308Y289201
BBC3308Y289200
BBC3308Y289199
BBC3308Y289198
BBC3308Y289197
BBC3308Y289196
BBC3308Y289195
BBC3308Y289194
看看大家是怎么写这种功能的批处理,想学习一下。
这是生成10个,我还可以写,如果生成100个,1000个,那就要晕了。还是学习一下,用循环是怎么写的。
这个输入的序号是固定14位的,我只需要计算最后2位数字就可以了。其实为负数时是不是要计算最后3位,但是如果是计算最后3位。如果最后3位为003时,我想也存在这个问题。没想明白。
谢谢!
作者: 77七 时间: 2022-10-29 03:00
本帖最后由 77七 于 2022-10-29 03:05 编辑
写了好几次,最后就这样吧- @echo off
- echo.
- set /p sn=请输入初始字符串:
- echo.
- set /p num=请输入生成的序列号数量:
- echo.
- echo A、正序 B、反序
- echo.
- set /p choice=请选择生成的数字方向(A/B,区分大小写):
-
- set a=%sn%
- set var1=%a:~0,8%
- set var2=%a:~8,6%
- if "%choice%"=="A" (
- set d=+
- ) else (
- set d=-
- )
-
- set c=0
- :m
- echo %var1%%var2%>>序列号.txt
- set /a var2=var2%d%1
- set /a c=c+1
- if %c% lss %num% goto :m else (
- echo 完成
- )
- pause
复制代码
作者: hfxiang 时间: 2022-10-29 08:34
- @echo off
- @rem 保存为ANSI格式
- set SN=BBC3308Y289263
- set "n="
- :SN_loop
- set n1=%SN:~-1%
- if %n1% GEQ 0 if %n1% LEQ 9 (
- set n=%n1%%n%
- set SN=%SN:~0,-1%
- goto :SN_loop
- )
- echo;
- set /a n1=n+10
- for /l %%a in (%n%,1,%n1%) do echo;%SN%%%a
- echo;
- set /a n1=n-10
- for /l %%a in (%n%,-1,%n1%) do echo;%SN%%%a
复制代码
作者: qixiaobin0715 时间: 2022-10-29 09:10
回复 1# thp2008
后面6位数值都要考虑在内才行。
正向BBC3308Y199999
反向BBC3308Y200000
看看上面2个例子即知。
作者: qixiaobin0715 时间: 2022-10-29 10:54
本帖最后由 qixiaobin0715 于 2022-10-30 08:06 编辑
批处理文件另存为ANSI编码:- @echo off
- set /p SN=请输入初始字符串:
- set /p NUM=请输入生成数量:
- set /p SEQ=请选择正反序(输入字母P为正序,输入其它字母为反):
- set var=%SN:~,8%
- set n=%SN:~-6%
- if /i %SEQ% equ P (
- set /a SV=%n%
- set /a EV=%n%+%num%-1
- ) else (
- set /a EV=%n%
- set /a SV=%n%-%num%+1
- )
- (for /l %%i in (%SV%,1,%EV%) do echo,%var%%%i)
- pause
复制代码
花拳绣腿的显示自己添加。
3个变量设置“set /p”规范输入的判断语句,自己写写。
作者: thp2008 时间: 2022-10-29 13:31
回复 77七
批处理文件另存为ANSI编码:花拳绣腿的显示自己添加。
3个变量设置“set /p”规范输入的判断 ...
qixiaobin0715 发表于 2022-10-29 10:54
感谢大家,简单多了,学到了。再次表示感谢!
不过有个小问题,就是反序的时候,我要求从大往小排序,这个该怎么改一下。
比如下面这个,运行后的结果是对的,但是排序是从小到大的。因为我需要直接复制到表格中,要求是反过来排序的。
请输入初始字符串:BBC3308Y289203
请输入生成数量:10
请选择正反序(输入字母P为正序,输入其它字母为反):a
BBC3308Y289194
BBC3308Y289195
BBC3308Y289196
BBC3308Y289197
BBC3308Y289198
BBC3308Y289199
BBC3308Y289200
BBC3308Y289201
BBC3308Y289202
BBC3308Y289203
请按任意键继续. . .
我要求,要像下面这样显示:
BBC3308Y289203
BBC3308Y289202
BBC3308Y289201
BBC3308Y289200
BBC3308Y289199
BBC3308Y289198
BBC3308Y289197
BBC3308Y289196
BBC3308Y289195
BBC3308Y289194
再麻烦一下,帮我改一下。非常感谢!
作者: pd1 时间: 2022-10-29 16:58
- <# :
- @echo off
- powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0' |Out-String|Invoke-Expression"
- pause
- #>
- $a=Read-Host "请输入初始字符串"
- $b=Read-Host "请输入生成数量"
- $c=Read-Host "请选择正反序(输入1为正序,输入-1为反)"
- [int]$a.Substring(8)..([int]$a.Substring(8)+[int]$b*[int]$c-[int]$c)|%{$a.Substring(0,8)+$_.tostring()}
复制代码
作者: WHY 时间: 2022-10-29 18:20
- @echo off
- setlocal enabledelayedexpansion
- set /p SN=请输入初始字符串(大于6个字符,后6位必须为数字):
- set /p NUM=请输入生成数量:
- set /p SEQ=请选择正反序(输入+为正序,输入-为反序):
- set "var=%SN:~0,-6%"
- set /a n1 = 1%SN:~-6%, n2 = n1 %SEQ% ( NUM - 1 )
- for /L %%i in (%n1%,%SEQ%1,%n2%) do (
- set "s=%%i"
- echo;%var%!s:~-6!
- )
- pause
复制代码
作者: 77七 时间: 2022-10-29 20:46
本帖最后由 77七 于 2022-10-29 20:57 编辑
回复 9# WHY 写的真巧妙!!
作者: thp2008 时间: 2022-10-29 21:19
我慢慢消化一下,越来越精简了。牛
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |