MD 编辑: Post:21.body 保存 删除 取消
更新 登录 & 发布

NeoBlog

不以物喜,不以己悲。

关注更新已关注

最新评论:

特别推荐:

杨深锐的博客

东先生的ZeroBlog

翻墻資訊快報

DOS命令

on Jan 23, 2017

概念:批处理就是运用一些含有特殊意义的符号和一些完成指定功能的命令组合而成

命令介绍(不区分大小写):

1、REM 和 ::
REM为注释命令,一般用来给程序加上注解,该命令后的内容不被执行,但能回显。
其次, :: 也可以起到rem 的注释作用, 而且更简洁有效; 但有两点需要注意:
<一>
1)、任何以冒号:开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容。
2)、有效标号: 冒号后紧跟一个以字母数字开头的字符串,goto语句可以识别。
3)、无效标号: 冒号后紧跟一个非字母数字的一个特殊符号,goto无法识别的标号,可以起到注释作用,所以 :: 常用作注释符号,其实 :+ 也可以起注释作用。
<二>
1)、与rem 不同的是, :: 后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态, 因为命令解释器不认为他是一个有效的命令行, 就此点来看, rem 在某些场合下将比 :: 更为适用; 另外, rem 可以用于 config.sys 文件中。
2、ECHO 和 @
ECHO打开回显或关闭回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。
@字符放在命令前将关闭该命令回显,无论此时echo是否为打开状态
语法:echo [{ on | off }] [message]
echo. #此用法将显示一空行,相当于回车,非常有用。
执行echo off 将关闭回显,它后面的所有命令都不显示命令本身,只显示执行后的结果,除非执行命令echo on 命令。
执行@echo off 不但关闭以后命令的回显,连echo off 命令本身也不显示了,通常以@echo off 作为批处理程序的首行。
一般以echo message 来显示一个特定的消息。
如:
@Echo off
Echo hello
Pause
运行显示:hello
3、PAUSE
在这里就是停止系统命令的执行并显示下面的内容。
如:
Pause
运行显示:请按任意键继续. . .
要显示其他提示语,可以这样用:
Echo 其他提示语 & pause > nul
4、errorlevel
程序返回码
echo %errorlevel%
每个命令运行结束,可以用这个命令行格式查看返回码,用于判断刚才的命令是否执行成功。 默认值为0,一般命令执行出错会设 errorlevel 为1。
5、title
返回CMD窗口的标题
title新标题 #可以看到cmd窗口的标题栏变了
6、COLOR
设置默认的控制台前景和背景颜色。
COLOR [attr]
attr 指定控制台输出的颜色属性
颜色属性由两个16进制数字指定 -- 第一个为背景,第二个为前景。
数字代表颜色代码:

  0 = 黑色    8 = 灰色      1 = 蓝色    9 = 淡蓝色
  2 = 绿色    A = 淡绿色      3 = 湖蓝色     B = 淡浅绿色
  4 = 红色    C = 淡红色      5 = 紫色    D = 淡紫色
  6 = 黄色    E = 淡黄色      7 = 白色    F = 亮白色

 如果没有给定任何参数,该命令会将颜色还原到 CMD.EXE 启动时的颜色。这个值来自当前控制台窗口、/T 开关或  DefaultColor 注册表值。
 如果用相同的前景和背景颜色来执行 COLOR 命令,COLOR 命令会将 ERRORLEVEL 设置为 1。
 例如: "COLOR fc" 在亮白色上产生亮红色

7、mode配置系统设备
配置系统设备
串行口:  MODE COMm[:] [BAUD=b] [PARITY=p] [DATA=d] [STOP=s]
[to=on|off] [xon=on|off] [odsr=on|off][octs=on|off] [dtr=on|off|hs][rts=on|off|hs|tg] [idsr=on|off
设备状态: MODE [device] [/STATUS]
打印重定向:   MODE LPTn[:]=COMm[:]
选定代码页:   MODE CON[:] CP SELECT=yyy
代码页状态:   MODE CON[:] CP [/STATUS]
显示模式:   MODE CON[:] [COLS=c] [LINES=n]
击键率:  MODE CON[:] [RATE=r DELAY=d]
例mode con cols=113 lines=15 & color 9f 此命令设置DOS窗口大小:15行,113列
8、goto 和 :
GOTO会点编程的朋友就会知道这是跳转的意思。
在批处理中允许以“:XXX”来构建一个标号,然后用GOTO XXX跳转到标号:XXX处,然后执行标号后的命令。
例:
if {%1}=={} goto noparms
if "%2"=="" goto noparms
标签的名字可以随便起,但是最好是有意义的字符串啦,前加个冒号用来表示这个字符串是标签,goto命令就是根据这个冒号(:)来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。
例:
@echo off
:start
set /a var+=1
echo %var%
if %var% leq 3 GOTO start
pause
运行显示:
1
2
3
4
9、find
在文件中搜索字符串。
FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[
...]]
/V 显示所有未包含指定字符串的行。
/C 仅显示包含字符串的行数。
/N 显示行号。
/I 搜索字符串时忽略大小写。
/OFF[LINE] 不要跳过具有脱机属性集的文件。
"string" 指定要搜索的文字串,
[drive:][path]filename 指定要搜索的文件。
如果没有指定路径,FIND 将搜索键入的或者由另一命令产生的文字。
Find常和type命令结合使用
Type [drive:][path]filename | find "string" [>tmpfile] #挑选包含string的行
Type [drive:][path]filename | find /v "string" #剔除文件中包含string的行
Type [drive:][path]filename | find /c #显示文件行数
以上用法将去除find命令自带的提示语(文件名提示)
例:
@echo off
echo 111 >test.txt
echo 222 >>test.txt
find "111" test.txt
del test.txt
pause
运行显示如下:
---------- TEST.TXT
111
请按任意键继续. . .
例:
@echo off
echo 111 >test.txt
echo 222 >>test.txt
type test.txt|find "111"
del test.txt
pause
运行显示如下:
111
请按任意键继续. . .
10、start命令
批处理中调用外部程序的命令(该外部程序在新窗口中运行,批处理程序继续往下执行,不理会外部程序的运行状况),如果直接运行外部程序则必须等外部程序完成后才继续执行剩下的指令。
例:start explorer d:\ # 调用图形界面打开D盘
11、assoc 和 ftype
文件关联
assoc 设置'文件扩展名'关联,关联到'文件类型'
ftype 设置'文件类型'关联,关联到'执行程序和参数'
当你双击一个.txt文件时,windows并不是根据.txt直接判断用 notepad.exe 打开
而是先判断.txt属于 txtfile '文件类型',再调用 txtfile 关联的命令行 txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1可以在"文件夹选项"→"文件类型"里修改这2种关联
assoc #显示所有'文件扩展名'关联
assoc .txt #显示.txt代表的'文件类型',结果显示 .txt=txtfile
assoc .doc #显示.doc代表的'文件类型',结果显示 .doc=Word.Document.8
assoc .exe #显示.exe代表的'文件类型',结果显示 .exe=exefile
ftype #显示所有'文件类型'关联
ftype exefile #显示exefile类型关联的命令行,结果显示 exefile="%1" %
assoc .txt=Word.Document.8
设置.txt为word类型的文档,可以看到.txt文件的图标都变了
assoc .txt=txtfile #恢复.txt的正确关联
ftype exefile="%1" %
# 恢复 exefile 的正确关联
如果该关联已经被破坏,可以运行 command.com ,再输入这条命令
12、pushd 和 popd
切换当前目录
@echo off
c: & cd\ & md mp3 #在 C:\ 建立 mp3 文件夹
md d:\mp4 #在 D:\ 建立 mp4 文件夹
cd /d d:\mp4 #更改当前目录为 d:\mp4
pushd c:\mp3 #保存当前目录,并切换当前目录为 c:\mp3
popd #恢复当前目录为刚才保存的 d:\mp4
一般用处不大,在当前目录名不确定时,会有点帮助。(dos编程中很有用)
13、CALL
CALL命令可以在批处理执行过程中调用另一个批处理,当另一个批处理执行完后,再继续执行原来的批处理
CALL [drive:][path]filename [batch-parameters] 调用的其它批处理程序。filename 参数必须具有 .bat 或 .cmd 扩展名。
CALL :label arguments 调用本文件内命令段,相当于子程序。被调用的命令段以标签:label开头 以命令goto :eof结尾。
另外,批脚本文本参数参照(%0、%1、等等)已如下改变:
批脚本里的 % 指出所有的参数(如 %1 %2 %3 %4 %5 ...)
批参数(%n)的替代已被增强。您可以使用以下语法:(看不明白的直接运行后面的例子)
%~1 - 删除引号("),扩充 %1
%~f1 - 将 %1 扩充到一个完全合格的路径名
%~d1 - 仅将 %1 扩充到一个驱动器号
%~p1 - 仅将 %1 扩充到一个路径
%~n1 - 仅将 %1 扩充到一个文件名
%~x1 - 仅将 %1 扩充到一个文件扩展名
%~s1 - 扩充的路径指含有短名
%~a1 - 将 %1 扩充到文件属性
%~t1 - 将 %1 扩充到文件的日期/时间
%~z1 - 将 %1 扩充到文件的大小
%~$PATH : 1 - 查找列在 PATH 环境变量的目录,并将 %1扩充到找到的第一个完全合格的名称。如果环境 变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串 可以组合修定符来取得多重结果:
%~dp1 - 只将 %1 扩展到驱动器号和路径
%~nx1 - 只将 %1 扩展到文件名和扩展名
%~dp$PATH:1 - 在列在 PATH 环境变量中的目录里查找 %1,并扩展到找到的第一个文件的驱动器号和路径。
%~ftza1 - 将 %1 扩展到类似 DIR 的输出行。
在上面的例子中,%1 和 PATH 可以被其他有效数值替换。%~ 语法被一个有效参数号码终止。%~ 修定符不能跟 %
使用
注意:参数扩充时不理会参数所代表的文件是否真实存在,均以当前目录进行扩展
要理解上面的知识,下面的例子很关键。
例:
@echo off
Echo 产生一个临时文件 > tmp.txt
Rem 下行先保存当前目录,再将c:\windows设为当前目录
pushd c:\windows
Call :sub tmp.txt
Rem 下行恢复前次的当前目录
Popd
Call :sub tmp.txt
pause
Del tmp.txt
:sub
Echo 删除引号: %~1
Echo 扩充到路径: %~f1
Echo 扩充到一个驱动器号: %~d1
Echo 扩充到一个路径: %~p1
Echo 扩充到一个文件名: %~n1
Echo 扩充到一个文件扩展名: %~x1
Echo 扩充的路径指含有短名: %~s1
Echo 扩充到文件属性: %~a1
Echo 扩充到文件的日期/时间: %~t1
Echo 扩充到文件的大小: %~z1
Echo 扩展到驱动器号和路径:%~dp1
Echo 扩展到文件名和扩展名:%~nx1
Echo 扩展到类似 DIR 的输出行:%~ftza1
Echo.
Goto :eof
14、shift
更改批处理文件中可替换参数的位置。
SHIFT [/n] 如果命令扩展名被启用,SHIFT 命令支持/n 命令行开关;该命令行开关告诉 命令从第 n 个参数开始移位;n 介于零和八之间。例如:
SHIFT /2会将 %3 移位到 %2,将 %4 移位到 %3,等等;并且不影响 %0 和 %1。
15、IF
IF 条件判断语句,语法格式如下:
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
下面逐一介绍,更详细的分析请看后面章节。
(1) IF [NOT] ERRORLEVEL number command
IF ERRORLEVEL这个句子必须放在某一个命令的后面,执行命令后由IF ERRORLEVEL 来判断命令的返回值。
Number的数字取值范围0~255,判断时值的排列顺序应该由大到小。返回的值大于等于指定的值时,条件成立
例:
@echo off
dir c:
rem退出代码为>=1就跳至标题1处执行,>=0就跳至标题0处执行
IF ERRORLEVEL 1 goto 1
IF ERRORLEVEL 0 goto 0
Rem 上面的两行不可交换位置,否则失败了也显示成功。
:0
echo 命令执行成功!
Rem 程序执行完毕跳至标题exit处退出
goto exit
:1
echo 命令执行失败!
Rem 程序执行完毕跳至标题exit处退出
goto exit
:exit
pause
运行显示:命令执行成功!
(2) IF [NOT] string1==string2 command
string1和string2都为字符的数据,英文内字符的大小写将看作不同,这个条件中的等于号必须是两个(绝对相等的意思)
条件相等后即执行后面的command
检测当前变量的值做出判断,为了防止字符串中含有空格,可用以下格式
if [NOT] {string1}=={string2} command
if [NOT] [string1]==[string2] command
if [NOT] “string1”==“string2” command
这种写法实际上将括号或引号当成字符串的一部分了,只要等号左右两边一致就行了,比如下面的写法就不行:
if {string1}==[string2] command
(3) IF [NOT] EXIST filename command
EXIST filename为文件或目录存在的意思
echo off
IF EXIST autoexec.bat echo 文件存在!
IF not EXIST autoexec.bat echo 文件不存在!
这个批处理大家可以放在C盘和D盘分别执行,看看效果
16、setlocal 与 变量延迟
要想进阶,变量延迟是必过的一关!所以这一部分希望你能认真看。
为了更好的说明问题,我们先引入一个例子。
例1:
@echo off
set a=4
set a=5 & echo %a%
pause
结果:4
解说:为什么是4而不是5呢?在echo之前明明已经把变量a的值改成5了?
让我们先了解一下批处理运行命令的机制:
批处理读取命令时是按行读取的(另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行),在 处理之前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值。我们现在分析一下例1,批处理 在运行到这句“set a=5 & echo %a%”之前,先把这一句整句读取并做了预处理——对变量a赋了值,那么%a%当然就是4了!(没有为什么,批处理就是这样做的。) 而为了能够感知环境变量的动态变化,批处理设计了变量延迟。简单来说,在读取了一条完整的语句之后,不 立即对该行的变量赋值,而会在某个单条语句执行之前再进行赋值,也就是说“延迟”了对变量的赋值。那么如何开启变量延迟呢?变量延迟又需要注意什么呢?举个例子说明一下:
例2: @echo off
setlocal enabledelayedexpansion
set a=4
set a=5 & echo !a!
pause
结果:5
解说:启动了变量延迟,得到了正确答案。变量延迟的启动语句是“setlocal enabledelayedexpansion”,并且变量要用一对叹号“!!”括起来(注意要用英文的叹号),否则就没有变量延迟的效果。
分析一下例2,首先“setlocal enabledelayedexpansion”开启变量延迟,然后“set a=4”先给变量a赋值为 4,“set a=5 & echo !a!”这句是给变量a赋值为5并输出(由于启动了变量延迟,所以批处理能够感知到动态变化,即不是先给该行变量赋值,而是在运行过程中给变量赋值,因此此时a的值就是5了)。
再举一个例子巩固一下。
例3:
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,1,5) do (
set a=%%i
)
pause
结果:
1
2
3
4
5
解说:本例开启了变量延迟并用“!!”将变量扩起来,因此得到我们预期的结果。如果不用变量延迟会出现什 么结果呢?结果是这样的:
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
即没有感知到for语句中的动态变化。

符号:
1、@ 命令行回显屏蔽符
2、% 批处理变量引导符
3、> 重定向符
4、>> 重定向符
5、<、>&、<& 重定向符
6、| 命令管道符
7、^ 转义字符
8、& 组合命令
9、&& 组合命令
10、|| 组合命令
11、"" 字符串界定符
12、, 逗号
13、; 分号
14、() 括号
15、! 感叹号
16、批处理中可能会见到的其它特殊标记符: (略)
CR(0D) 命令行结束符
Escape(1B) ANSI转义字符引导符
Space(20) 常用的参数界定符
Tab(09) ; = 不常用的参数界定符

         + COPY命令文件连接符
         * ? 文件通配符
         / 参数开关引导符
         : 批处理标签引导符

  1、@   命令行回显屏蔽符
  这个字符在批处理中的意思是关闭当前行的回显。我们从前几课知道 ECHO OFF可以关闭掉整个批处理命令的回显,但不能关掉ECHO OFF这个命令,现在我们在ECHO OFF这个命令前加个@,就可以达到所有命令均不回显的要求
  2、%   批处理变量引导符
  这个百分号严格来说是算不上命令的,它只是批处理中的参数而已(多个%一起使用的情况除外,以后还将详细介绍)。 引用变量用%var%,调用程序外部参数用%1至%9等等

%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %为命令行传递给批处理的参数
%0 批处理文件本身,包括完整的路径和扩展名
%1 第一个参数 %9 第九个参数 %
从第一个参数开始的所有参数
参数%0具有特殊的功能,可以调用批处理自身,以达到批处理本身循环的目的,也可以复制文件自身等等。
例:最简单的复制文件自身的方法
copy %0 d:\wind.bat
3、> 重定向符
输出重定向命令 这个字符的意思是传递并且覆盖,他所起的作用是将运行的结果传递到后面的范围(后边可以是文件,也可以是默认的系统控制台)
在NT系列命令行中,重定向的作用范围由整个命令行转变为单个命令语句,受到了命令分隔符&,&&,||和语句块的制约限制。
比如:
使用命令:echo hello >1.txt将建立文件1.txt,内容为”hello “(注意行尾有一空格)
使用命令:echo hello>1.txt将建立文件1.txt,内容为”hello“(注意行尾没有空格)
4、>> 重定向符
输出重定向命令 这个符号的作用和>有点类似,但他们的区别是>>是传递并在文件的末尾追加,而>是覆盖 用法同上
同样拿1.txt做例子
使用命令:
echo hello > 1.txt
echo world >>1.txt
这时候1.txt 内容如下:
hello
world
5、<、>&、<& 重定向符
这三个命令也是管道命令,但它们一般不常用,你只需要知道一下就ok了,当然如果想仔细研究的话,可以自己查一下资料。(本人已查过,网上也查不到相关资料)
<,输入重定向命令,从文件中读入命令输入,而不是从键盘中读入。
@echo off
echo 2005-05-01>temp.txt
date <temp.txt
del temp.txt
这样就可以不等待输入直接修改当前日期

  >&,将一个句柄的输出写入到另一个句柄的输入中。
  <&,刚好和>&相反,从一个句柄读取输入并将其写入到另一个句柄输出中。

常用句柄:0、1、2,未定义句柄:3—9
1>nul 表示禁止输出正确的信息
2>nul 表示禁止输出错误信息。
其中的1与2都是代表某个数据流输入输出的地址(NT CMD 称之为句柄,MSDOS称之为设备)。
句柄0:标准输入stdin,键盘输入
句柄1:标准输出stdout,输出到命令提示符窗口(console,代码为CON)
句柄2:标准错误stderr,输出到命令提示符窗口(console,代码为CON)
其中的stdin可被<重定向,stdout可被>、>>重定向,而stderr在DOS下不可直接重定向,只有通过ctty或其它命令将系统控制权转交给其它设备的方式,来间接完成。
6、| 命令管道符
格式:第一条命令 | 第二条命令 [| 第三条命令...]
将第一条命令的结果作为第二条命令的参数来使用,记得在unix中这种方式很常见。
例如: dir c:|find "txt"
以上命令是:查找C:\所有,并发现TXT字符串。
FIND的功能请用 FIND /? 自行查看 在不使format的自动格式化参数时,我是这样来自动格式化A盘的 echo y|format a: /s /q /v:system
用过format的都知道,再格盘时要输入y来确认是否格盘,这个命令前加上echo y并用|字符来将echo y的结果传给format命令 从而达到自动输入y的目的(这条命令有危害性,测试时请慎重)
7、^ 转义字符
^是对特殊符号<,>,&的前导字符,在命令中他将以上3个符号的特殊功能去掉,仅仅只把他们当成符号而不使用他们的特殊意义。
比如
echo test ^>1.txt
结果则是:test > 1.txt
他没有追加在1.txt里。只是显示了出来。另外,此转义字符还可以用作续行符号。
举个简单的例子:
@echo off
echo 英雄^
是^
好^
男人
pause
不用多说,自己试一下就明白了。
8、& 组合命令
语法:第一条命令 & 第二条命令 [& 第三条命令...]
&、&&、||为组合命令,顾名思义,就是可以把多个命令组合起来当一个命令来执行。这在批处理脚本里是允许的,而且用的非常广泛。因为批处理认行不认命令数目。这个符号允许在一行中使用2个以上不同的命令,当第一个命令执行失败了,也不影响后边的命令执行。 这里&两边的命令是顺序执行的,从前往后执行。
比如: dir z:\ & dir y:\ & dir c:\
以上命令会连续显示z,y,c盘的内容,不理会该盘是否存在
9、&& 组合命令
语法:第一条命令 && 第二条命令 [&& 第三条命令...]
用这种方法可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令。这个命令和上边的类似,但区别是,第一个命令失败时,后边的命令也不会执行 dir z:\ && dir y:\ && dir c:\
10、|| 组合命令
语法:第一条命令 || 第二条命令 [|| 第三条命令...]
用这种方法可以同时执行多条命令,当一条命令失败后才执行第二条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;
提示:组合命令和重定向命令一起使用必须注意优先级
管道命令的优先级高于重定向命令,重定向命令的优先级高于组合命令
问题:把C盘和D盘的文件和文件夹列出到a.txt文件中。你将如何来搞定这道题?有朋友说,这还不是很easy的问题吗?同时执行两个dir,然后把得到的结果>到a.txt里就ok了嘛,看例: dir c:\ && dir d:\ > a.txt
仔细研究一下这句执行后的结果,看看是否能达到题目的要求!错了!这样执行后a.txt里只有D盘的信息!为什么?就因为这里&&命令和>命令不能同时出现一个句子里(批处理把一行看成一个句子)!!组合命令&&的优先级没有管道命令>的优先级高(自己总结的,不妥的地方请指正)!所以这句在执行时将本行分成这两部分:dir c:\和dir d:\ > a.txt,而并不是如你想的这两部分:dir c:\ && dir d:\和> a.txt。要使用组合命令&&达到题目的要求,必须得这么写: dir c:\ > a.txt && dir d:\ >> a.txt 这样,依据优先级高低,DOS将把这句话分成以下两部分:dir c:\ > a.txt和dir d:\ >> a.txt。例十八中的几句的差别比较特殊,值得好好研究体会一下。
当然这里还可以利用&命令(自己想一下道理):dir c:\ > a.txt & dir d:\ >> a.txt
11、"" 字符串界定符
双引号允许在字符串中包含空格,进入一个特殊目录可以用如下方法
cd "program files"
cd progra~1
cd pro*
以上三种方法都可以进入program files这个目录
12、, 逗号
逗号相当于空格,在某些情况下“,”可以用来当做空格使
比如 dir,c:\
13、; 分号
分号,当命令相同时,可以将不同目标用;来隔离,但执
行效果不变,如执行过程中发生错误,则只返回错误报告,但程序仍会执行。(有人说不会继续执行,其实测试一下就知道了)
比如: dir c:\;d:\;e:\;z:\
以上命令相当于
dir c:\
dir d:\
dir e:\
dir f:\
如果其中z盘不存在,运行显示:系统找不到指定的路径。然后终止命令的执行。
例:dir c:\;d:\;e:\1.txt
以上命令相当于
dir c:\
dir d:\
dir e:\1.txt
其中文件e:\1.txt不存在,但e盘存在,有错误提示,但命令仍会执行。
为什么?如果目标路径不存在,则终止执行;如果路径存在,文件不存在,则继续执行。
14、() 括号
小括号在批处理编程中有特殊的作用,左右括号必须成对使用,括号中可以包括多行命令,这些命令将被看成一个整体,视为一条命令行。
括号在for语句和if语句中常见,用来嵌套使用循环或条件语句,其实括号()也可以单独使用,请看例子。
例: 命令:echo 1 & echo 2 & echo 3
可以写成:
(
echo 1
echo 2
echo 3
)
上面两种写法效果一样,这两种写法都被视为是一条命令行。
注意:这种多条命令被视为一条命令行时,如果其中有变量,就涉及到变量延迟的问题。
15、! 感叹号
没啥说的,在变量延迟问题中,用来表示变量,即%var%应该表示为!var!,请看前面的setlocal命令介绍。

阅读全文

ZeroNet脱坑笔记

on Jan 04, 2017

ZeroNet 脱坑笔记

这篇文章主要介绍了我的一些ZeroNet分布式网络使用并搭建网页的经验之谈。

首先来了解几个名词?

分布式网络

分布式我估计很多人都知道了,看名字的意思就知道,分布,分布?就是分散的意思吗,对,没错,就是分散的意思。最先提出来的是计算机中的一种算法,把复杂的计算,分成若干个小模块,小部分来分别计算。然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。而现在又出现分布式和集群的概念。可以这样理解,分布式是指将不同的业务分布在不同的地方。 而集群指的是将几台服务器集中在一起,实现同一业务,而分布式的每隔节点可以做一个集群,集群而不一定是分布式。简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。

分布式网络是由分布在不同地点且具有多个终端的节点机互连而成的。分散网络也称“分布式网络”(Distributed Networks)。它与中央控制式网络系统相对应,是一套全新的网络系统。

优点:

分布式网络与中央控制式网络对应,它没有中心,因而不会因为中心遭到破坏而造成整体的崩溃。在分布式网络上,节点之间互相连接,数据可以选择多条路径传输。

缺点:

不利于集中管理。安全性不好控制。

比特币(BitCoin)

比特币(BitCoin)的概念最初由中本聪在2009年提出,根据中本聪的思路设计发布的开源软件以及建构其上的P2P网络。比特币是一种P2P形式的数字货币。点对点的传输意味着一个去中心化的支付系统。

是一种全球通用的加密互联网货币。与采用中央服务器开发的第一代互联网不同,比特币采用点对点网络开发的区块链,打开第二代互联网的广泛应用。

和法定货币相比,比特币没有一个集中的发行方,而是由网络节点的计算生成,谁都有可能参与制造比特币,而且可以全世界流通,可以在任意一台接入互联网的电脑上买卖,不管身处何方,任何人都可以挖掘、购买、出售或收取比特币,并且在交易过程中外人无法辨认用户身份信息。2009年,不受央行和任何金融机构控制的比特币诞生。比特币是一种“电子货币”,由计算机生成的一串串复杂代码组成,新比特币通过预设的程序制造,随着比特币总量的增加,新币制造的速度减慢,直到2140年达到2100万个的总量上限,被挖出的比特币总量已经超过1200万个。详细信息请Google,维基百科等。

加密技术

对称加密和非对称加密,有了这个密码学加密基础,比特币可以很好的在网络流通。

P2P网络

P2P不要理解错了,不是什么P2P借贷,网络借贷,P2P理财。点对点网络(peer-to-peer),一种网络技术和网络拓扑结构。数据的传输采用点对点的传输。

对等式网络(peer-to-peer, 简称P2P),又称点对点技术,是无中心服务器、依靠用户群(peers)交换信息的互联网体系,它的作用在于,减低以往网络传输中的节点,以降低数据丢失的风险。与有中心服务器的中央网络系统不同,对等网络的每个用户端既是一个节点,也有服务器的功能,任何一个节点无法直接找到其他节点,必须依靠其户群进行信息交流。

相应的诞生点对点传输协议(point-to-point)

BitTorrent (协议)

BitTorrent协议(简称BT,俗称比特洪流、BT下载)是用在对等网络中文件分享的网络协议程序。和点对点(point-to-point)的协议程序不同,它是用户群对用户群(peer-to-peer),而且用户越多,下载同一文件的人越多,下载该档案的速度越快。且下载后,继续维持上传的状态,就可以“分享”,成为其用户端节点下载的种子文件(.torrent),同时上传及下载。

原理:

普通的HTTP/FTP下载使用TCP/IP协议,BitTorrent协议是架构于TCP/IP协议之上的一个P2P文件传输协议,处于TCP/IP结构的应用层。

自由网(Freenet)是对等网络的一个应用软件。用Java编写的跨平台软件,有5个以上节点的用户群,就可以用宽带分享种子文件,组成独立的网络系统。主要应用在匿名互联网领域,如海盗湾、维基解密、丝绸之路等。

ZeroNet

ZeroNet 是一个以P2P用户为基础而构成的类互联网的分布式网络。ZeroNet使用了比特币加密技术和BitTorrent网络。官方网址代码托管

支持的平台:

运行:

  • Win:ZeroNet.cmd
  • OSX:ZeroNet(.app)
  • Linux:ZeroNet.sh

至于详细的安装过程,使用过程,我就不说了,每个文件夹的作用,有官方文档查看。

我说下我遇到问题:

以Windows为例:

程序包下载之后可以直接解压,会得到如下这样的文件夹目录。

由于是Python语言开发的,所以需要一些Python支持的包。你点击zeronet.cmd批处理文件,会生成ZeroNet的文件夹。而我们的工作目录也在ZeroNet文件夹中。看ZeroNet文件夹的文件:

具体的什么作用,不用管,我也就不细说。Docker构建文件在Dockerfile文件。

src源码,tools一些外部工具,如tor,(暗网)也叫匿名网络,如需访问需要下载tor浏览器,并且在中国的网络环境下需要科学上网,翻墙之类,代理之类的。plugins插件文件夹。log运行日志。data是我们主要关心的目录,存放了我们的重要数据。打开data文件夹如下:

有一个users.json文件,需要我们保存备份。重要文件,有你的很多重要信息。如:私钥。

备份之前,我们需要进入特殊网站,也就是这种网结构构成的网络,如:

地址就是:http://127.0.0.1:43110/1GHYeJ9tyHvpTbMsFkuS8mFtrjVatFScmA/

没错就是上面的结构,这种结构就是网站结构,你没有看错。

这是我随便构建的一个网站。

你需要到ZeroID网址:http://127.0.0.1:43110/zeroid.bit/注册一个你自己的ID号,身份名称。或者去:http://127.0.0.1:43110/zeroverse.bit/这个网址也可以注册。

注册完成,你需要建站或者做个实验什么的,你可以去克隆别人已经弄好的网址。然后以自己的身份登入,如下图:

右上角有个0的图标,按住图标往左拉,就是进入前端控制面板,web界管理界面。如果点击就是回到默认的首页。点击的克隆的网址,然后往左拉,用你注册的身份登入,有一些站点设置啊,文件的更新重载啊,自己摸索吧。

现在去备份users.json文件吧。记得关注我哦。网址:http://127.0.0.1:43110/yanghua.bit/

你一定很好奇上面的网址yanghua.bit的域名怎么来的。本来是这种格式:http://127.0.0.1:43110/1GHYeJ9tyHvpTbMsFkuS8mFtrjVatFScmA/

怎么把生成的网页地址address变成我的域名形式呢?

首先

你需要打开http://127.0.0.1:43110/Mail.ZeroNetwork.bit/获取一个自己的邮箱。

你可以到这个网址https://bitmsg.me/去注册一个邮箱地址,回得到这样的一个邮箱地址:

BM-2cTJJJqRZyZDd8Z5PVYGF5Byn77JrJiAHP这是我的邮箱,欢迎打扰。如下图:

然后你给这个地址发邮件:

BM-2cVddUzqe4DWCGorpXUXAUh2SwyD5S9ByU

Domain:你需要的域名,自己随便取,怎么判断你取的域名有没有人用呢?去这个网站https://dotbit.me/检测下,CHECK一下。

Zeronet Site:就是你的站点地址。

Namecoin receive address:是你的比特币钱包收款地址,安装Namecoin的时候会自动生成一个地址,在收款地址中。

下载地址:https://namecoin.org/download/

发送之后会在24小时之内给你回信,并域名生效。

配置域名:

在你的contents.json下添加domain就好。

有什么不懂的就发邮件吧!bitmessage。

阅读全文

Netdata实现web监控

on Dec 31, 2016 · 1 min read

Netdata 是一款 Linux 性能实时监测工具。

Netdata是一个高度优化的Linux守护进程,它为Linux系统,应用程序,SNMP服务等提供实时的性能监测。

Netdata是Linux系统实时性能监测工具,提供web界面的界面视角

它用可视化的手段,将被监测者最细微的细节,展现了出来。这样,你便可以清晰地了解你的系统和应用程序此时的状况。

阅读全文

v2ray代理

on Dec 31, 2016 · 6 min read

V2Ray是一个优秀且开源的网络代理工具,可以帮助你自由的使用互联网,目前已经全平台支持
Windows、Mac、Android、IOS、Linux等操作系统的使用。相对起Shadowsocks来说属于后起之
秀,在混淆能力、兼容性、速度上有着独到的优点。

阅读全文

博客配置技巧

on Jan 01, 1970 · 1 min read

※ 博客头像的切换

  1. 准备你的头像 LOGO 修改名称为 avatar.png 。
  2. 打开 ZeroBundle\ZeroNet\data\博客ID\img ,用你的头像 LOGO 替换原avatar.png 。
阅读全文
新增文章

Title

21 小时之前 · 2 min read ·
3 comments
Body
阅读全文

Title

21 hours ago · 2 min read

0 条评论:

请登录吐槽一下吧!
user_name1 day ago
回复
Body
当前已连接 20 个节点
Neo Bolg © 2016 | Powered by ZeroNet [ open, free, and uncensored ]
This page is a snapshot of ZeroNet. Start your own ZeroNet for complete experience. Learn More