标题: 批处理能实现序列数吗?
[打印本页]
作者: 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.batb 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 ]