Board logo

标题: 批处理能实现序列数吗? [打印本页]

作者: bush     时间: 2005-11-22 23:46    标题: 批处理能实现序列数吗?

比如要产生:1、2、3……999等序列数,咋办?

要求不能使用xp下的命令。
作者: 220110     时间: 2005-11-23 07:57
"要求不能使用xp下的命令。"  这怎么理解?也就只能用DOS的COMMAND?

如果那样的话,用WAIT 和COUNTER 应该可以实现.思路:参考PLC编程那样用"定时器与计数器接力"来实现长延时方式,定时驱动,计数步进激活.

不过BATCH FILE 可能会有更简单方式.请大家讨论:>
作者: JonePeng     时间: 2005-11-23 19:42
用第三方工具Strings.com可以做到。
作者: willsort     时间: 2005-11-25 21:37
Re bush:

      最近似乎有许多需要在 MSDOS/Win9x_COMMAND 下解决的问题,这与我三年前的境遇十分相似,颇有他乡故知之感。

      关于产生序列数,我记得曾在一篇过去的回帖中提及,现在很难找到了;如果有时间,我会将之整理到我 “[分享]批处理编程的异类” 这篇主题中,敬请等待。

      现提供一个比较类似的代码[1],其中使用双重循环嵌套产生和处理了带前缀0和不带前缀0-9和10-99之间的序列数。

[1]将文件名改为001.txt 010.txt...100.txt
http://www.cn-dos.net/forum/viewthread.php?tid=14512

[ Last edited by willsort on 2005-11-25 at 21:54 ]
作者: bush     时间: 2005-11-26 00:07
谢谢willsort,我的问题已经解决了!
作者: bush     时间: 2005-11-26 00:12    标题: 谈谈最近用批处理解决问题一例(序列)——献丑了

起因是这样的,拿到一个网站的下载包,回来一看是残缺不全的。要核对后才知道差哪些文件,苦差事!而这些文件名是由序列数构成的,像这样:www.xxx.com/xxx/file1.html、www.xxx.com/xxx/file2.html……www.xxx.com/xxx/file389.html
鼓捣半天,弄了些批处理解决,思路是先生成序列数,再用exist判断。

开始之前为稳妥起见,把.html改为了.htm
a.bat
b 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
;实际上第一个批处理文件也是用批处理生成的。
b.bat
@echo off
for %%a in (1,2,3,4,5,6,7,8,9) do call c node%%a.htm
:redo
if "%1" == "" goto end
for %%a in (0,1,2,3,4,5,6,7,8,9) do call c node%1%%a.htm
if errorlevel 2 goto end
shift
goto redo
:end
c.bat
@echo off
if not exist %1 echo %1 >> urls.lst
echo on
最后得到的urls.lst就是需要的文件。嗬嗬,再批处理下载去~

[ Last edited by bush on 2005-11-26 at 00:13 ]
作者: 无奈何     时间: 2005-11-26 11:42
要是在 CMD 下简单了,一条语句就能办到。
for /l %i in (1,1,389) do @if not exist file%i.html echo.file%i.html>>urls.lst
这样下载的事我一般用 curl 或 wget 来干,然后再批量整理,很省事。
作者: willsort     时间: 2005-11-26 17:21

——————————————  willsort 版务记录  ——————————————
合并主题:{17950}谈谈最近用批处理解决问题一例(序列)——献丑了
合并理由:二主题存在上下文的直接联系
——————————————  willsort 版务记录  ——————————————

:: Count.bat - Generate a serial of numbers
:: Will Sort - 2005-11-26 - WinXP_CMD/MSDOS7.10/MSDOS6.22
:: 说明:一个可独立运行的示例程序,产生 1~123 之间的序列数输出到文件中
::       可以将它简单地修改,以产生任意位数、任意区间、任意格式的的序列数
::       甚至小数也是有可能的产生的。
:: 链接:http://www.cn-dos.net/forum/viewthread.php?tid=17883
@echo off
if "%1"==":" goto %2
set _prog=%0
call %_prog% : loop1 0 1 2 3 4 5 6 7 8 9
set _prog=
set _start=
set _break=
goto end

:loop1
if "%3"=="" goto end
if "%3"=="0" call %_prog% : loop2 0 1 2 3 4 5 6 7 8 9
:: 如果产生的序列数需要前缀0,则省略上一行,下一行的 if not "%3"=="0" 也须删去
if not "%3"=="0" call %_prog% : loop2 %30 %31 %32 %33 %34 %35 %36 %37 %38 %39
if "%_break%"=="true" goto end
shift
goto loop1

:loop2
if "%3"=="" goto end
if "%3"=="0" call %_prog% : loop3 0 1 2 3 4 5 6 7 8 9
:: 如果产生的序列数需要前缀0,则省略上一行,下一行的 if not "%3"=="0" 也须删去
if not "%3"=="0" call %_prog% : loop3 %30 %31 %32 %33 %34 %35 %36 %37 %38 %39
if "%_break%"=="true" goto end
shift
goto loop2

:loop3
if "%3"=="" goto end
if "%3"=="1" set _start=true
if "%_start%"=="true" echo.%3>>sn.txt
:: 上一行是计数的功能代码,示例仅将数字输出到文件中
if "%3"=="123" set _break=true
if "%3"=="123" goto end
:: _start 是开始计数的标记,1   是开始计数的边界
:: _break 是中断计数的标记,123 是中断计数的边界
shift
goto loop3

:end
[ Last edited by willsort on 2005-11-26 at 18:16 ]