Board logo

标题: 建立和天空软件站结构一样的软件分类目录 [打印本页]

作者: namejm     时间: 2006-9-23 07:08    标题: 建立和天空软件站结构一样的软件分类目录

  从天空软件站里的软件分类页面(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

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


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

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

@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的没见过,自己顺手写了个,大家帮忙测试下。
作者: namejm     时间: 2006-9-23 12:07
  经过测试,3742668版主的代码准确无误,简洁高效。

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

  短短几行代码就蕴藏了至少三个技巧,PF。
作者: wydos     时间: 2006-9-24 02:58
真佩服3742668版主,够巧妙的!!!
作者: vkill     时间: 2006-9-24 03:06
我当时是

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


这样建的,因为弄的少,所以没有想用批处理,我感觉里面好多目录建了不用,还不如不建,呵呵
作者: vkill     时间: 2006-9-24 03:11
call :Create %%i   这有多个参数,写的 太好了
作者: redtek     时间: 2006-9-24 07:26
太精彩了~~~
作者: 3742668     时间: 2006-9-24 08:14
刚刚没事去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 ]
作者: 3742668     时间: 2006-9-24 08:19
刚刚发现test.txt有点毛病,在"图形图像"中有个"Flash 栏",应该把中间的空格去掉。
作者: utem999     时间: 2006-9-24 22:10
非常的精彩
作者: vkill     时间: 2006-9-25 00:39
我个人觉得用 call :    能使很多问题简单化
作者: Bee     时间: 2006-9-25 00:47
太精彩了我要加油学习哪位高能能指点下学习方法!QQ:229934739
作者: pengfei     时间: 2006-9-25 10:26
看你们讨论, 心里痒痒的, 也想研究一下. 但namejm兄的代码怎么也看不明白. 3742668版主写的就更不用说了. 本人根底太浅, 有些命令不是很明白.

你们的代码看不懂, 自己就想怎么去实现这样的功能. 经过反复测试, 居然成功了.

@echo off
set root=%cd%
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (天空软件站软件分类.txt) do (
    set list=%%i
    set new=md !list!
    if "!list:~0,1!"=="1" cd %root% & md !list:~2! & cd !list:~2! & set new=
    !new!
)
pause
作者: namejm     时间: 2006-9-25 10:41
  兄弟们一个写得比一个精简高效,精彩。
作者: lslcxlsl     时间: 2008-3-5 09:59
请教,如果目录有三层或者个别目录下有三层或者四层目录.这样的批处理应该怎么写?
作者: tinglang     时间: 2008-3-11 19:11
好经典的东西 正好要整理软件呢
作者: lovebaby001     时间: 2010-9-3 16:53
手工去创建这么详细的文件夹的确很累人,但如果把没分过类的好几百个甚至上千个rar文件按照分类目录整理归类,那就更恐怖了!

我想是不是可以以上面的目录名作为关键词,用批处理自动识别rar文件的文件名进行批量移动文件

比如:现在有这样几个rar文件
VBS加密.rar
Acc转MSSQL数据库.rar
服务器安全设置专家.rar

用批处理读取上面的分类目录,只要rar的文件名与分类目录最少2个字以上或3,4个字能匹配的就把该rar文件移动到此分类目录的文件夹内。匹配不上的放弃,继续匹配下一个文件,以此类推。

最终实现:
VBS加密.rar 移动到→ 加密工具
Acc转MSSQL数据库.rar 移动到→ 数据库类
服务器安全设置专家.rar 移动到→ 服务器区


不知道如果用批处理的话能不能实现我这个思路,求高手千万帮忙看看吧!