Wget 使用方法简介

导读

本文将介绍wget的基本使用方法,和一些高级用法,比如递归下载等。对于经常在FTP网页下载数据的读者来说,可以说是必备的技能之一。

1. 介绍

Wget 是由 GNU项目创建的计算机工具。您可以使用它从各种 Web服务器检索内容和文件。这个名字是万维网和get这个词的组合。它支持通过FTP、SFTP、HTTP 和 HTTPS下载。

Wget 是用可移植的 C 语言创建的,可在任何Unix 系统上使用。也可以在Mac OS X、Microsoft Windows、AmigaOS和其他流行平台上实现。

2. 安装

  • Ubuntu 18.04
sudo apt-get install wget
  • CentOS 7
sudo yum install wget

3. 命令

3.1. 单个文件

# 下载单个文件到当前文件夹
wget https://example.zip  # wget url

3.2. 多个文件

需要将多个件的url写到一个txt文件中,再利用wget下载

# example.txt
https://example1.zip

https://example2.zip

https://example3.zip
  • 下载上面example.txt文件中的文件
wget -i example.txt

3.3. 命名

  • 给下载文件重命名
wget -O example.zip https://ttt.zip  

# 利用-o 选项,重命名文件为`example.zip`

3.4. 指定目录

  • 将下载文件保存到指定目录
wget -P documents/archives/ https://example.zip

# 利用-p 选项,将文件保存到`documents/archives/`目录下

3.5. 限制下载速度

wget --limit-rate=500k https://example.zip

# 将下载速度最高限制为 500k

3.6. 重试尝试次数

wget -tries=100 https://example.zip

# 设置重新连接次数为100

3.7. 后台下载

当下载的文件非常大的时候,可以将下载任务放置到后台

wget -b https://example.zip

3.8. FTP下载

wget --ftp-user=YOUR_USERNAME --ftp-password=YOUR_PASSWORD ftp://example.com/something.tar
  • --ftp-user:FTP用户名
  • --ftp-password:密码

3.9. 断点续连

当再下载途中,链接中断时,可以使用-c选项,进行重新连接,继续上次下载。

wget -c https://example.zip

3.10. 检索全站

  • 下载整个网站的内容
wget --mirror --convert-links --page-requisites --no-parent -P documents/websites/ https://example.com

参数

作用

–mirror

递归下载

–convert-links

所有链接都将转换为正确的脱机使用

–page-requisites

下载将包括CSS、JS和图像

–no-parent

不检索父目录

-P

指定保存目录

3.11. 查找断开链接

  • 查找网页中无法下载的连接,并输出到文件中
wget -o wget-log -r -l 5 --spider http://example.com

参数

作用

-o

将输出收集到文件中供以后使用

-l

指定递归级别

-r

递归下载

–spider

将wget设置为spider模式

  • 利用下面命令,过滤出无法下载的文件
grep -B 2 '404' wget-log | grep "http" | cut -d " " -f 4 | sort -u

# wget-log是第一步的输出结果

3.12. 下载编号文件

如果文件名是按照数字编号时,可以同时下载。

wget http://example.com/images/{1..50}.jpg
本文转载于网络 如有侵权请联系删除

相关文章

  • 记某大用户Elasticsearch数据方案处理过程

    一、前言|需求演变需求一:某大用户CDN日志写入Elasticsearch时,从JSON字段里剔除tag结尾的字段,保留固定已知的字段需求二:用户的doc中的字段数不明确,删除以tag结尾的类似“2301931667f1adcfc56e7f10f6d5970b”这样的固定位数的无规则字符串。要把那些CDN校验产生的33位的值为tag的字段删除,其余都保留日志截图如下:改造日志截图二、需求一实现方案上图标红的字段要移除,其他字段要保留。这里通过remove+setpipeline的方式,实现此类字段的预处理。实际是要处理req.headers字段里的内容数量,可以先拷贝出来,然后再移除掉req.headersbody知识点:set-processpipelineSetprocessor|ElasticsearchGuide[8.3]|Elastic这里用到了set下的copyfrom.先拷贝出来,然后再移除,注意此功能是ES7.14新功能。版本可能要升级。removepipelineRemoveprocessor|ElasticsearchGuide[8.3]|Elastic测试过程:

  • 有赞沈淦:代码是一种信仰,破圈才能突围 | TGO专访

    作者|Milan本期专访嘉宾: 沈淦(怀民),有赞技术VP,TGO鲲鹏会(杭州)负责人; 资深互联网技术专家,拥有20多年的团队管理经验,曾在蚂蚁金服、泰金所、大搜车等公司任技术总监、CTO,跨越互联网金融、汽车、零售等多个垂直领域。在大搜车任技术VP期间,经历了从120人技术团队到1000人团队快速增长的管理体系升级。有一个故事是这样的: 一个人去参加一个技术团队的会议,会上有人滔滔不绝,有人专门提反对意见,还有一个人几乎沉默不语,在本子上写写画画,然后这个人突然说了几个关键的观点。问题来了,谁是团队的技术领导核心?所有人都会觉得是最后提出真知灼见的那个人,因为他一直在思考,在给关键意见,而不是人云亦云,也不是只会唱反调。但是反思日常工作中,可能大部分人会觉得滔滔不绝的那个人才是技术管理者。这就考验技术管理者的洞察了。这个故事来自杰拉尔德·温伯格的《成为技术领导者》的开篇,也是对沈淦思考方式和工作落地影响很大的一本书。2019年,还在大搜车的沈淦在接受TGO的采访中分享了1000人团队的管理秘籍,概括为以下四点:组织架构先行:先有靠谱的组织架构,才能有靠谱的人;培养团队的执行力:包括

  • 地图可视化神器kepler.gl近期重要更新

    1简介kepler.gl作为开源地理空间数据可视化神器,也一直处于活跃的迭代开发状态下。而在前不久,kepler.gl正式发布了其2.4.0版本,下面我们就来对其重要的新特性进行介绍:图12kepler.gl2.4.0重要新特性2.1增量时间窗口  在这次更新中,为时间序列数据的可视化新增了增量时间窗口功能,在上一个版本2.3.2中,当我们的数据集带有时间类型字段时,在添加对应的Filters之后,显示出的时间窗口是这个样子的:图2  而在2.4.0版本中,时间窗口如图3所示:图3  在如图4一样从默认的MovingTimeWindow模式切换到IncrementalTimeWindow模式之后,就可以使用增量时间窗口模式,画面中的数据会从起点开始持续叠加:图42.2Python接口新增_repr_html_()方法  而这个更新不仅针对原生的kepler.gl,还针对其面向Python的接口keplergl新增_repr_html_()方法,使得将kepler.gl与flask等进行结合更加方面,就像folium中的_repr_html_()方法一样:结合flaskfromflask

  • 炼丹感悟——超详细解读

    作者:Edison_G感谢大家一直支持“计算机视觉研究院”微信公众号,平时有没做好的地方望大家见谅,做的不好的希望您指出来,我们会修正不对之处,将做得更好,将最好的分享给大家!今天给大家讲讲DNN(深度神经网络)在训练过程中遇到的一些问题,然后我们应该怎么去注意它,并学会怎么去训练它。1、数据集的准备:必须要保证大量、高质量且带有准确标签的数据,没有该条件的数据,训练学习很困难的(但是最近我看了以为作者写的一篇文章,说明不一定需要大量数据集,也可以训练的很好,有空和大家来分享其思想---很厉害的想法);2、数据预处理:这个不多说,就是0均值和1方差化,其实还有很多方法;3、Minibatch:这个有时候还要根据你的硬件设备而定,一般建议用128,8这组,但是128,1也很好,只是效率会非常慢,注意的是:千万不要用过大的数值,否则很容易过拟合;4、梯度归一化:其实就是计算出来梯度之后,要除以Minibatch的数量,这个可以通过阅读源码得知(文章链接:各类的梯度优化);5、学习率:①一般都会有默认的学习率,但是刚开始还是用一般的去学习,然后逐渐的减小它; ②一个建议值是0.1,适用于很多

  • Java8使用CompletableFuture的部分方法

    背景CompletableFuture的使用是为了异步编程,异步编程可以解决同步编程的性能瓶颈问题。也就是将同步操作变为了并行操作。 当我们有一大批数据需要处理的时候我们可以将这些数据分而治之,使用CompletableFuture通过线程池的多个线程进行异步执行。异步执行的意思就是下一个人不不用等上一个任务执行完成,也就是重新起一个线程池这里的线程池指的就是当上一个人任务没有执行完,需要新起一个的线程就在这个线程池里创建或者直接获取已有的线程。CompletableFuture介绍在1.8之前我们使用多线程操作的方法是通过CallAble来实现call方法,然后通过future获得异步的结果,其中要么是使用get()方法进行阻塞,我么轮训IsDone()查看是否为true这两种方法都会导致主线程的阻塞。于是在1.8的引入了CompletableFuture,他是针对future做了改进。通过example来看一下具体的使用CompletableFuture的主要方法1.CompletableFuture提供了四个静态方法来创建一个异步操作。publicstaticCompletabl

  • 作业3

    用指针处理链表这是属于算法上的内容,会有专门的课程:数据结构、算法技巧与分析,算法的特点就是比较抽象,个人感觉,要学会善于画图和上机实践,当然,你最好得有扎实的语法基础,这样做起来才不会吃力。算法在程序设计当中是驾驭在语言之上,是整个程序的灵魂,要学会实在不容易。总之,1、多画图能够化抽象为简单;2、多上机实践能够加深对抽象的理解;3、拥有扎实的语法基础能够让你更容易上手。指针其实是一个×××变量,与其它数据不同的是,它的作用是用来存储其它变量的地址,比如说 inta; int*p=&a; 这里面,a是普通的×××变量,p则是指针,用来存储变量a的地址, 这样做的话,就可以很容易的找到变量a所在的位置,从而得到a的值1:指针是一个地址,指向的是个类型:我们知道,c语言中的类型有int,char,bool(这个不常用),一般我们使用int,char就可以满足一般的类型需求的,如果对于变量的长度过大,就是用long,float,double,关于各个类型使用的的长度问题,可以使用sizeof(int)或者sizeof(long)来查看各个类型,在系统中的小。而指针就是一个8个字节(

  • centos7-关闭防火墙

    版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/qq_37933685/article/details/89342051关闭防火墙centos:关闭selinux:vi/etc/sysconfig/selinux 修改 ... SELINUX=disabled ... 修改完后 reboot复制防火墙开启某端口:7: firewall-cmd--zone=public--add-port=8888/tcp--permanent 6: iptables-AINPUT-ptcp--dport8080-jACCEPT /etc/rc.d/init.d/iptablessave /etc/init.d/iptablesrestart复制防火墙关闭某端口:firewall-cmd--zone=public--remove-port=8888/tcp--permanent复制防火墙查看某个端口状态:firewall-cmd--query-port=8888/tcp复制查看已经开放的端口:7: fi

  • 关于Redis的几件小事 | Redis的数据类型/过期策略/内存淘汰

    1.string这是最基本的类型了,就是普通的set和get,做简单的kv缓存。2.hash这个是类似map的一种结构,这个一般就是可以将结构化的数据,比如一个对象(前提是这个对象没嵌套其他的对象)给缓存在redis里,然后每次读写缓存的时候,可以就操作hash里的某个字段。key=150 value={ “id”:150, “name”:“zhangsan”, “age”:20 }复制hash类的数据结构,主要是用来存放一些对象,把一些简单的对象给缓存起来,后续操作的时候,你可以直接仅仅修改这个对象中的某个字段的值value={ “id”:150, “name”:“zhangsan”, “age”:21 }复制3.list有序列表,这个是可以做很多不同操作的 比如:微博,某个大v的粉丝,就可以以list的格式放在redis里去缓存key=某大v value=[zhangsan,lisi,wangwu]复制比如:可以通过list存储一些列表型的数据结构,类似粉丝列表了、文章的评论列表了之类的东西比如:可以通过lrange命令,就是从某个元素开始读取多少个元素,可以基于list实现分页

  • 看懂指数级增长:各领域中的颠覆,让未来来得更快

    导读:近日,在美国波士顿举行的LiveWorx2019大会的主题演讲中,XPRIZE基金会创始人、著名未来学家PeterDiamandis阐述了当今世界正在以指数级速度发生变化,并认为未来没有什么问题是我们无法解决的。同时,他提出随着指数级增长时代的到来,我们会见到越来越多的行业颠覆者,而且会见证到更多的“柯达时刻”。要避免这种结果,我们必须始终保持创新。来源:资本实验室(ID:coinsay)01一个乐观的理由随着数字化产品的普及,越来越多的人都可以轻松地获取更多的资本、计算能力和知识。只要保持正确的方向,拥有热情,任何人都可以有机会去实现他们的想法。未来,来的异常迅速。一切事物都比以往更快的融合,这种融合正在以指数级的速度进行着。过去,我们认为世界是线性的,从一个世纪到下一个世纪,都没有太大的变化。今天,世界是全球性的,技术呈指数级增长,事情的变化不再以世纪为单位,而是以月甚至以天为单位。随着人类计算能力的逐年翻番,指数增长与线性增长的差距,让企业在在面临巨大压力的同时,也给予了我们很多的机遇,这意味着未来拥有无限的可能性。 02我们正在面临越来越多的“柯达时刻”1996年前后,全

  • 常用cmd代码片段及.net core打包脚本分享

    bat基础命令注释:rem注释~~输出:echohelloworld接收用户输入:%1%2,第n个变量就用%n表示当前脚本路径:%~dp0当前目录路径:%cd%设置变量:setcurrentPath=%cd%关闭回显:@echooff//隐藏执行路径,@表示包含echooff这条命令也不现实路径请按任意键继续:pause调用外部程序:startxxx.exe等待子程序执行完毕:callstartxxx.exe切换当前目录:cd/d路径显示下级子目录名称:dir/b/a:d显示下级子文件名称:dir/b/a:-d命令连接符:cmd1&cmd2,在cmd1执行成功后执行cmd2字符串分割:``复制:xcopy要复制的目录目标目录/s/e/Q/Y/I1.保存当前目录到局部变量并输出保存:setcurrentPath=%cd% 输出:echo%currentPath2.判断第一个脚本参数是否为ab(/i忽略大小写),若是则输出success,否则输出参数if/i%1==ab(echosuccess)else(echo%1)3.判断当前执行目录(驱动器、文件或文件夹)是否存在是否存在lo

  • Swift3.0 - 协议protocol

    学习目标swift中的协议和OC中协议的区别swift中的协议的用法怎么使用swift和Object-C协议的区别1.OC中的协议只能用于类,swift中的协议不仅能用于类,还能用于结构体和枚举 2.OC中的协议可以设置可选实现,但Swift中的协议必须实现 3.Swift中的协议增加了一个关键字mutating可以决定结构体和枚举实现协议的时候,是否可以修改属性的值 Swift协议(protocol)定义一个协议protocolLoveMusic{ funcsongMusic() varsimpleDescription:String{get} mutatingfuncmodifyMusic(name:String) }复制协议可以继承协议(多个)protocolLoveMusic:Love,Skill{ funcsongMusic() varsimpleDescription:String{get} mutatingfuncmodifyMusic(name:String) }复制协议的重写protocolLove{ varname:String{getset} } //我们重写协议

  • 原生js上传文件 发送JSON,XML,对请求的表单进行URL编码详解

    编码请求主体HTTP的POST请求包括一个请求主体,将会包含客户端传递给服务器的数据,表单编码的请求HTML表单,当用户提交表单时,表单中的数据将会编码到字符串中,一并伴随着请求发送。默认情况下HTML表单通过POST方法发送给服务器,而编码后的表单数据为请求主体。规则:使用URL编码,使用等号把编码后的名字和值分开,并使用&符号将名/值对分开。如下所示:find=pizza&zipcode=02134&redius=1km表单数据编码格式会有一个正式的MIME类型application/x-www-form-urlencoded复制MIME多用途internet邮件扩展类型,对大小写不敏感,传统写法小写一个栗子用于HTTP请求的编码对象/* * 编码对象的属性 * 如果它们是来自HTML表单的名/值对,使用application/x-www-form-urlencolded * 将键值对转换为HTTP的编码方式的一个工具函数 */ functionencodeFormData(data){ if(!data)return''; //如果

  • CrowdStrike:我们挡住了中国黑客组织飓风熊猫(HURRICANE PANDA)的攻击

    通常我们看到黑客入侵事件的报道大多为:某公司被黑客入侵了,检测到一未知行为,事件响应小组已介入调查和处理,客户和公众确定入侵行为结束,公司解除安全警报……你是不是也这样认为黑客入侵都是偶发性、短暂性的呢?而APT(高级可持续性威胁)攻击并不是这样——真正有目的性的攻击者并不会考虑战斗或者使命什么时候结束,直至被发现或被踢出网络的那一刻才算暂时中止。他们的工作就是入侵到某网站,然后潜伏在其中。这其中的艰苦和所面对的困难只有他们自己知道,他们通常会连续工作几周甚至几个月,直至成功入侵。当然功夫不负有心人,大多数情况下都能成功。成功入侵之后,他们便会继续他们的主要工作,窃取敏感数据、使受害者宕机等。论持久战成功入侵的心诀就是持之以恒。攻击者需要做好长久作战的准备,要知道攻击目标都不是傻子,他们可能很快就发现了你的攻击行为,并给予了还击,这个时候你就要另辟蹊径,重新寻找攻击突破口了。有时一次成功的入侵会循环往复好多次重复操作。还有一种比较高效的还击方法——损毁攻击者的间谍情报技术和工具,这样既阻碍了入侵,还浪费了攻击者大量的时间和精力,一石二鸟有没有?好了,废话有点多,该进入正题了……背景Cr

  • 修复 docker build 错误 "ERROR: No build stage in current context"

    若dockerbuild时遇到了错误"ERROR:Nobuildstageincurrentcontext",则有可能是没有将FROM命令语句放置在第一行。 问题 例如,Dockerfile文件如下: MAINTAINERFengYinXu #builderstage FROMnode:16-alpineasbuilder ARGAPP_HOME=/home/web/app #Createappdirectory WORKDIR${APP_HOME} #Installappdependencies #Awildcardisusedtoensurebothpackage.jsonANDpackage-lock.jsonarecopied #whereavailable(npm@5+) COPYpackage*.json${APP_HOME}/ RUNnpminstall #buildproductionpackage COPY.${APP_HOME}/ RUNnpmrunbuild 复制 以上Dockerfile在dockerbuild.时会遇到错误: 解决方案 解决方案很简单,将FR

  • 10分钟学会js处理json常用方法

    一、json定义 JSON(JavaScriptObjectNotation),它是一串字符串只不过元素会使用特定的符号标注。 {}双括号表示对象 []中括号表示数组 ""双引号内是属性或值 :冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象) JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中、数据由逗号分隔、花括号保存对象、方括号保存数组JSON值可以是:数字(整数或浮点数)、字符串(在双引号中)、逻辑值(true或false)、数组(在方括号中)、对象(在花括号中)、null 所以{"name":"Michael"}可以理解为是一个包含name为Michael的对象 二、为什么用json JSON是纯文本格式,是独立于语言和平台的。 生成和解析相对于XML而言要简单。 读写的速度更快。 三、JS内置两个Json方法 1、对象转化为字符串 任何把JavaScript变成Json,就是把这个对象序列化为Json字符串,然后才可以通过网络传递;  JSON.stringify({},[],"") &nb

  • 2019牛客暑期多校训练营(第三场) F Planting Trees(单调队列+最大子矩阵)

    代码里面已经注释,复杂度可看成O($n^{3}$) AC代码: 1#include<bits/stdc++.h> 2#definenummch-48 3#definepdputchar('') 4#definepnputchar('\n') 5#definepbpush_back 6#definempmake_pair 7#definefifirst 8#definesesecond 9#definefifirst 10#definesesecond 11#definefre1freopen("1.txt","r",stdin) 12#definefre2freopen("2.txt","w",stdout) 13usingnamespacestd; 14template<typenameT> 15voidread(T&res){ 16boolflag=false;charch; 17while(!isdigit(ch=getchar()))(ch=='-')&&(flag=true); 18for(res=numm;isdigit(

  • 布隆过滤器

    了解 1970年,由Bloom提出的 由二进向量(位数组)与随机映射函数组成映射关系 BitSet作为位容器(位数组),位值为0或者1 随机映射函数(HashFunction),目的生成一个对应的数值,然后存入到BitSet中。 优点: 数组容器占用空间小。存储100W个数据,占122KB(100W*1bit/8/1024) 如果存储过数据,容器必定有痕迹 缺点: 容器有痕迹的,不一定存储过数据 容器中只能添加数据,不能删除数据。删除元素导致位值的变化,会提高容器的错误率 数据量越大,错误率会越高。所以一般位容器的初始位数会很大 注:1M=1024KB=1024*1024B(byte)=1024*1024*8bit 原理 添加对象 被添加的对象,通过HashFunction会生产一个或多个对应的数值,并存储到BitSet容器中。BitSet中位值会由0->1,多个对象存储时,位值也只会存储到1。 判断对象 判断的过程中,实际是看对象通过HashFunction所生产的一个或多个对应的数值,在BitSet中的位值是否都为1。 图中,对象4对应的所有位值里面,存在一

  • C/C++语言的学习方向

    这个世界上有太多的坑,如果我们不具备查阅资料的能力和对现实世界的思考能力,入坑是大概率的事情。 C/C++语言能做什么?C/C++程序员在做什么?企业需要什么样的C/C++程序员?对初学者来说,要搞清楚这些问题并不容易。 一个农民种菜之前,会考虑菜的行情(包括销量和价钱),如果您打算学习C/C++语言,也应该先了解C/C++程序员的行情。 了解菜的行情要去菜市场,了解C/C++程序员的行情去人才市场,中国最大的IT人才市是前程无忧。 我们先来查一些资料。 一、中国编程语言的排名情况 登录前程无忧的官网,分别输入java、C++、python、javascript、.net、C#、PHP、SQL、IOS关键字,城市选择北京、上海、广州和深圳,查询到的招聘职位分别是31032、22842、19274、14091、6956、8018、5284、21302、6014个。(这是2020年6月查到的数据,不同时期的查询结果略有不同) 数据显示企业的JAVA和C++职位比例约6:4,培训机构的主流课程是JAVA和Python等,进一步导致了C/C++程序员的缺乏。 培训机构不愿意开设C/C++课

  • 爱自己的人脸上散发的光芒是骗不了别人的,你会活在平静淡定喜悦中,绝少埋怨,鲜有不满,没有太多话需要澄清,说清楚,内心是一片宁静而有力量的海。

    爱自己的人脸上散发的光芒是骗不了别人的,你会活在平静淡定喜悦中,绝少埋怨,鲜有不满,没有太多话需要澄清,说清楚,内心是一片宁静而有力量的海   1、有时候,我们等的不是什么人什么事,我们等的是时间,等时间,让自己改变。   2、我喜欢紧紧的抱住你那一刻,就像得到了全世界。   3、命运就是这样蹊跷,无法言说,不是来得太早,就是来得太迟。刚刚好的情感交流,需要得到上天多大的宠爱。   4、你不可能要求每个人都读懂你,理解你,那样会显得你是一件廉价品。   5、人生有一副最好的补药,就是使自己放松开心,去除掉担心与烦恼的意念,放下那些不足与过剩的心。   6、如果你期待自由,那么女人真正的自由,不在于拥有多少金钱,而在于拥有多少能自由支配的时间,并且同时还能有饭吃有衣穿有房子居住,并且享有创造和尊严。   7、生活不是等待暴风雨过去,而是要学会在雨中跳舞。   8、多少浅浅淡淡的转身,是旁人看不懂的情深。   9、有些路看起来很近,可是走下去却很远的,缺少耐心的人永远走不到头。人生,一半是现实,一半是梦想。   10、我想牵你的手,从心动,到古稀。   11、一些人,一些事,闯进

  • webpack配置一些些优化

    1、防止项目在正式站还胡乱地console 在biuld下webpack.prod.conf.js的 plugins:[]加入:   newwebpack.optimize.UglifyJsPlugin({//我现在不想要各种打印了 compress:{ warnings:false,//警告 drop_debugger:true,//debugger drop_console:true//console } }),复制 2、减少目录检索范围  loader遍历的目录范围可以缩小一下,指定babel-loader处理的范围: { test:/\.js$/, use:['babel-loader'], include:path.join(__dirname,'app') }复制

  • javascript文件夹选择框的两种解决方案

    javascript文件夹选择框的两种解决方案 解决方案1:调用windows 的shell,但会有安全问题. *browseFolder.js *该文件定义了BrowseFolder()函数,它将提供一个文件夹选择对话框 *以供用户实现对系统文件夹选择的功能 *文件夹选择对话框起始目录由 *Shell.BrowseForFolder(WINDOW_HANDLE,Message,OPTIONS,strPath)函数 *的strPath参数设置 *例如:0x11--我的电脑 *  0--桌面 * "c:\\"--系统C盘 * *用如下代码把该函数应用到一个HTML文件中: * <scriptsrc="browseFolder.js"></script> *或把下面代码直接COPY到<scriptlanguage="javascript">...</script>标

相关推荐

推荐阅读