中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 建立和天空软件站结构一样的软件分类目录
« [1] [2] »
作者:
标题: 建立和天空软件站结构一样的软件分类目录 上一主题 | 下一主题
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『楼 主』:  建立和天空软件站结构一样的软件分类目录

  从天空软件站里的软件分类页面(http://www.skycn.com/sort/soft_sort.html)抓取软件分类文本之后,再把每个类别文件夹名中的空格去掉,得到如下文本,保存为“天空软件站软件分类.txt”,然后运行本代码,可以在当前目录下得到和下面列表结构一样的文件夹。从此,从网上down软件之后,你就再也不用为软件难以归类而发愁了,因为你使用的分类方法和专业软件站的分类是一模一样的!

  天空软件站软件分类.txt
            1 网络软件
            主页浏览 浏览辅助 离线浏览 书签工具 拨号计时 邮件检测 邮件处理 主页制作 网页辅助
            网站推广 FTP工具  下载工具 网络共享 网络加速 搜索引擎 远程监控 新闻阅读 IP工具
            服务器区 网络监测 网络辅助 文件共享 Telnet类 邮件群发 信息发布

            1 系统工具
            系统增强 系统设置 系统备份 桌面工具 剪贴工具 开关定时 CPU相关  内存工具 磁盘工具
            数据备份 卸载清除 升级补丁 系统测试 系统其它

            1 应用软件
            压缩解压 文件管理 文件分割 文件更名 时钟日历 键盘鼠标 电子阅读 汉字输入 文字处理
            字体工具 打印工具 虚拟光驱 转换翻译 信息管理 杂类工具 文件修复 光驱工具 文档管理
            计算器类

            1 联络聊天
            聊天工具 OICQ专区 ICQ专区  网络电话 传真工具 电话寻呼 信使工具 MSN专区         

            1 图形图像
            图像制作 动画制作 图像捕捉 图像转换 图片压缩 图像浏览 图标工具 图像管理 3D制作类
            图像其它

            1 多媒体类
            媒体播放 音频处理 视频处理 音频转换 视频转换 桌面制作 媒体管理 光盘刻录 WINAMP区
            媒体制作 媒体其它 网络电视 媒体点播

            1 行业软件
            股票证券 商业贸易 财务管理 彩票工具 行政管理 出版印刷 工程建筑 机械电子 纺织服装
            健康医药 法律法规 餐饮旅游 交通运输 辅助设计 租借管理 农业相关 保险行业 审计评估
            其它行业 客户管理 物流中介

            1 游戏娱乐
            趣味软件 测字算命 游戏工具 模拟器类 棋牌游戏 益智游戏 动作射击 体育竞技 网络游戏
            其它游戏

            1 编程开发
            编程工具 安装制作 补丁制作 网络编程 数据库类 调试工具 编译工具 编程其它 综合控件
            网络控件 媒体控件 DBF控件  系统控件 界面控件 图像控件 时间控件 文件控件 压缩控件
            图表控件 其它控件

            1 安全相关
            病毒防治 系统安全 系统监视 网吧管理 网络安全 加密工具 密码恢复 密码管理 浏览安全

            1 教育教学
            教育管理 文科工具 理科工具 外语学习 学前教育 电脑学习 考试系统 天文地理 电子教室

            1 软件资讯
            软件报道 软件教程 设计学院                                                

            1 精彩动画
            动画类   MTV类    专辑类
  建立软件分类目录.bat
@echo off
set num=0
:readtxt
:: 读取文本内容,读取过的用more命令过滤掉
for /f "tokens=1*" %%i in ('more +%num% 天空软件站软件分类.txt') do (
    set /a num+=1
    if "%%i"=="1" (
      call :build_top %%j
    ) else (
      call :build_sub "%%i %%j")
)
goto :eof

:build_top
:: 建立父文件夹
if %num% gtr 1 popd
if exist %1 rd /q /s %1
md %1 && pushd %1
goto :eof

:build_sub
:: 建立子文件夹
for /f "tokens=1*" %%x in (%1) do (
    if "%%x"=="1" (
        call :build_top %%y
        goto readtxt
    ) else (
    if exist %%x rd /q /s %%x
    md %%x
    if not "%%y"=="" call :build_sub "%%y")
)
goto :eof


   此帖被 +8 点积分     点击查看详情   
评分人:【 雨露 分数: +6  时间:2007-9-17 18:18
评分人:【 Wingl83 分数: +2  时间:2008-10-17 18:59




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-23 07:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复
雨露
管理员

DOS非常爱好者


积分 6209
发帖 2598
注册 2006-1-20
状态 离线
『第 2 楼』:  

我硬盘上的收集的软件很多年前就是按天空软件站软件分类.可惜那时没有遇到楼主,是一个一个创建,一个一个命名,哈哈!多辛苦啊,现在用楼主这个方便多了,收藏一个,谢谢了,等哪一天硬盘挂了,这个批处理就有用武之地了!



2006-9-23 09:23
查看资料  发短消息 网志  OICQ (156647374)  编辑帖子  回复  引用回复
xypcmac
初级用户





积分 167
发帖 80
注册 2005-11-7
状态 离线
『第 3 楼』:  

不错

2006-9-23 09:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by 雨露 at 2006-9-23 09:23:
我硬盘上的收集的软件很多年前就是按天空软件站软件分类.可惜那时没有遇到楼主,是一个一个创建,一个一个命名,哈哈!多辛苦啊,现在用楼主这个方便多了,收藏一个,谢谢了,等哪一天硬盘挂了,这个批处理就有用武之地了!

  这个也是今天准备刻张软件盘的时候才想到要去弄的。以前见过hitme写过类似的代码,用的好象是华军软件园的分类,本来想直接用他的代码,但后来一直没翻到,就自己动手写了一个,思路大概和他的差不多,但是感觉他的代码写得要复杂一点,可能容错性能更好一点。恳请手上有hitme这段代码的兄弟帖一份出来借鉴一下。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-23 09:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 5 楼』:  


@echo off
    pushd %cd%
    for /f "tokens=*" %%i in (天空软件站软件分类.txt) do call :Create %%i
goto :eof

:Create
    if "%1" == "1" (
                    popd
                    md %2
                    pushd %2
                   ) else (
                           md %*
                          )
goto :eof
hitme的没见过,自己顺手写了个,大家帮忙测试下。

   此帖被 +10 点积分     点击查看详情   
评分人:【 雨露 分数: +6  时间:2007-9-17 18:22
评分人:【 mtiankong 分数: +2  时间:2008-10-8 17:09
评分人:【 Wingl83 分数: +2  时间:2008-10-17 19:01


2006-9-23 11:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 6 楼』:  

  经过测试,3742668版主的代码准确无误,简洁高效。

  仔细分析,其中应用到了几个技巧:
  
  1、最开始的时候就用 pushd %cd% 保存了当前目录路径,以待建立子文件夹完毕之后返回到当前目录,虽然操作了pushd %cd% ,但是工作目录却还是停留在当前目录下,打破了常规思维;
  2、虽然 call :Create %%i 一句形式上只有一个形参,但是实际上,%%i 的内容是用空格分隔开的,实际上存在好几个形参,所以下面的 md %2 才能成功执行;
  3、可以用一条 md 语句一次性建立多个文件夹,所以才会有md %* 一句出现,省去了我的代码中用 if not "%%y"==""  来判断字符串值是否截取完毕的操作。

  短短几行代码就蕴藏了至少三个技巧,PF。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-23 12:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wydos
中级用户





积分 304
发帖 117
注册 2006-4-4
状态 离线
『第 7 楼』:  

真佩服3742668版主,够巧妙的!!!

2006-9-24 02:58
查看资料  发送邮件  发短消息 网志  OICQ (327337973)  编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 8 楼』:  

我当时是

for %%a in (主页浏览 浏览辅助 离线浏览) do md %%a


这样建的,因为弄的少,所以没有想用批处理,我感觉里面好多目录建了不用,还不如不建,呵呵

2006-9-24 03:06
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 9 楼』:  

call :Create %%i   这有多个参数,写的 太好了

2006-9-24 03:11
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 10 楼』:  

太精彩了~~~

2006-9-24 07:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 11 楼』:  

刚刚没事去baidu了一下,找到了hitme的版本,不过他使用的分类文件和你的不同,他是上一级目录为第一个,后面的全部为子目录,一类为一行。
test.txt
系统程序 优化设置 系统辅助 光碟工具 开关定时 系统检测 系统其他 磁盘工具 卸载清除 升级补丁

应用软件 压缩解压 文件处理 时钟日历 数据备份 键盘鼠标 汉字输入 文件管理 字体工具 转换翻译 信息管理 其他工具 手机工具 数据恢复 扫描打印 办公软件 天文地理

网络工具 主页浏览 网络辅助 离线浏览 书签工具 拨号计时 邮件处理 主页制作 网页辅助 网站推广 FTP工具 下载工具 网络共享 网络加速 搜索引擎 聊天联络 服务器区 远程监控 数据库类 新闻阅读 浏览辅助

图形图像 图像制作 动画制作 图像捕捉 图像转换 图片压缩 图像浏览 图标工具 图像管理 Flash栏 图像处理

媒体工具 媒体播放 音频处理 视频处理 音频转换 视频转换 媒体管理 媒体制作 AMP专栏  网络音视 媒体录制

游戏娱乐 测字算命 游戏工具 模拟器类 棋牌游戏 益智游戏 动作射击 体育竞技 网络游戏 其它游戏 Flash游戏

安全相关 病毒防治 系统安全 系统监视 网吧管理 网络安全 木马防护 密码恢复 密码管理

其他工具 电子书籍 趣味软件 安装制作 杂项补丁 理财相关 教育学习 编程开发 加密解密 健康医药

特别专栏 精品破解 网友点播 腾讯专区 加壳脱壳 调试工具 编译工具 解密辅助

精品源码 ASP程序  PHP程序  CGI程序 Java程序 其它源码

桌面资源 屏幕保护 SKIN面板 精美壁纸 桌面工具 风格主题

硬件工具 硬件工具 主板驱动 显卡驱动 声卡驱动 网卡驱动 外设驱动 内存优化
run.cmd
@echo off
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=1*" %%i in (test.txt) do (
set _P=%%j
for /l %%l in (1,1,20) do (
for /f "tokens=1" %%a in ("!_P!") do (
if "%%a" neq "" md "%%i\%%a"
set _P=!_P:* =!
)
)
)
endlocal
针对他所用的格式,也用我的方法写一个:
@echo off
    for /f "tokens=1,*" %%i in (test.txt) do set str=%%i && call :Create %%j
goto :eof

:Create
    md %str%
    cd %str%
    md %*
    cd..
goto :eof
可能因为不知道是第几转的缘故吧,发觉hitme的代码稍微有点瑕疵,大家可以在结尾加上一句pause看看,另外若谁有首发可以贴上来大家看看。



楼下所述错误已更正。。。

[ Last edited by 3742668 on 2006-9-25 at 02:47 ]

2006-9-24 08:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 12 楼』:  

刚刚发现test.txt有点毛病,在"图形图像"中有个"Flash 栏",应该把中间的空格去掉。

2006-9-24 08:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
utem999
初级用户




积分 135
发帖 54
注册 2006-9-10
状态 离线
『第 13 楼』:  

非常的精彩

2006-9-24 22:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 14 楼』:  

我个人觉得用 call :    能使很多问题简单化

2006-9-25 00:39
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
Bee
初级用户




积分 44
发帖 16
注册 2006-9-23
来自 广东省
状态 离线
『第 15 楼』:  

太精彩了我要加油学习哪位高能能指点下学习方法!QQ:229934739

2006-9-25 00:47
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (94689558)  编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: