生活在合肥,爱上合肥社区

合肥163论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 183|回复: 0

批处理学习总结之常用命令1

[复制链接]

141

主题

183

帖子

805

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
805
发表于 2018-8-13 19:15:30 | 显示全部楼层 |阅读模式
1. 显示或更改文件属性:attrib

ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [[drive:] [path] filename] [/S [/D]]

+ 设置属性。- 清除属性。

R 只读文件属性。

A 存档文件属性。

S 系统文件属性。

H 隐藏文件属性。

[drive:][path][filename] 指定要处理的文件属性。/S 处理当前文件夹及其子文件夹中的匹配文件。/D 也处理文件夹。

1,查看文件的文件属性

格式:ATTRIB [drive:][path][filename]

例1,attrib d:\ pagefile.sys查看d:\ pagefile.sys文件的属性。

2,修改文件的属性。格式:attrib ±属性

例 :attrib –h d:\ pagefile.sys消除d:\ pagefile.sys的"隐藏"属性。

例:attrib +s +h d:\ pagefile.sys给d:\ pagefile.sys设置"系统"和"隐藏"属性。

3, 批量文件处理

例1,attrib +h d:\123\*.bat /s通过/s参数可批量将d:\123及其子目录下的所有bat文件设置为"隐藏"属性.

例2,attrib +h d:\123 /s /d将d:\123及其下所有同名为123的子目录设置为"隐藏"属性.参数/d必须在批量设置文件属性的全部,对指定目录及其下所有子目录进行文件属性操作。参数/d可以理解为"directory"(目录),也就是说/d 必需和/s一起使用。

"attrib +h d:\123 /s /d"和"attrib +h d:\123\*.* /s /d"区别:前者只有d:\123以及它同名的子目录设为了"隐藏",而其它文件及子目录都没有设置"隐藏"。后者则将d:\123下的所有文件及子目录设置了"隐藏"属性,但d:\123目录没有设置"隐藏"属性。

2.启动外部命令或打开程序文件:Call,Start,Rundll32

call用来调用执行另一个bat或者cmd文件(当然也可执行其它格式的可执行文件),

start是调用系统默认的打开方式执行一个文件,是在一个新的进程里面执行

rundll32 是给一个可独立运行的dll创建一个进程空间从而使他可以运行,详见《悟透Delphi》中进程的时空观。

Call与start对比:

一是调用范围不同:CALL主要用来进行批处理的内部调用如CALLEND和一些DOS命令的调用如CALL SET TEST=2,但也可以调用其他可执行文件,而START则不能进行内部调用,但其可以执行基本上所有的外部程序,还可以执行SHELL,如打开文件夹START "" "%WINDIR%",安装网络打印机START "" "\\IP\Printer",全部需要注意有无START调用外部程序的区别;

二是调用方式不同:CALL实际上调用,所以在CALL另一个批处理时是在同一窗体进程里执行,而START是执行,所以在执行另外一个批处理时是在不同的窗体进程里执行,也就是说在新的进程里执行,虽然START可以加入B参数,但其结果却完全不同.如我们使用CALL SET TEST=2和START /B SET TEST=2看似执行的结果相同,但是我们发现后者有两个进程,而且在窗体里要执行两次EXIT才能退出,所以当我们使用START来执行一个批处理后最好在被调用的批处理中也加一个EXIT,否则无法退出被调用的批处理的DOS窗体,但是使用CALL调用时如果在被调用的批处理中存在EXIT则会直接结束原始和别调用的批处理程序,这是一个非常严重的问题,建议在被调用的程序中使用goto:eof来取代EXIT;.

三是调用结果不同:CALL调用不仅可以把参数或变量传给被调用的批处理,而且被调用的批处理也可以设置参数或变量以便回传,而START只能把参数或变量传给被调用的批处理,却不能回传参数或变量,这一点实际上是第二点的延伸.至于此我们还必须注意使用CALL调用其他批处理中我们使用GOTO的时候建议使用不同的节来跳转,否则可能跳转到原批处理中而不能完整的执行被调用的批处理.

Call调用其它bat文件时,他们拥有同一个壳cmd.exe,在同一个进程当中,所以他们的变量是互通的;start调用其它批处理时,他们拥有两个壳cmd.exe,但在不同的进程当中,而由于这时他们的壳都是cmd.exe,可以看成父子进程关系,子进程可以读取父进程中的变量,但不能赋予父进程变量的值。而当用start打开其它程序时,它们之间有不同的壳,就不是父子进程关系。

call具有goto的功能,在程序中实现灵活跳转,而start则不具有这种功能。

:begin

@echo off

set /a a=%random%%%10

echo %a%

pause>nul

if %a% geq 5 (call :run2) else call :run1

:run1

echo 111111111

call :ex

:run2

echo 222222222

:ex

call :begin

call和goto的区别在于call可以用goto :eof回来,而goto则一去不复返:call之后,就执行到指定标签上并往后执行到未尾,然后再回到call句之后,是自然回来的,而非goto:eof回来的。goto:eof的:eof是默认的标签,不用定义,此句是直到最后并结束批文件。

start . 在命令行启动文件目录

start , 新开启cmd命令行

3. 目录切换:cd

1,同一个分区的切换目录切换格式:格式:CD [盘符][路径]

如果当前目录是C:\WINDOWS\system3,我们要返回到上一层目录,即返回到C:\WINDOWS时,我们可以这样:cd..

如果当前目录是C:\WINDOWS\system3,我们要返回根目录,即返回到C:\时,你可以试下这个:cd\ 或cd c:\

其实在DOS命令中.、..和\都是表示相对路径的,.是当前目录,..是上一层目录,而\则表示根目录。

2,不同分区的切换格式:格式:CD /d [盘符][路径]

如果当前目录是C:\WINDOWS\system3,我们要切换到D盘的根目录,可以cd /d D:\ 或D:

3.CD 的另一个用途:显示当前的完整路径,一般用通过 %cd% 加以引用。

@echo off

echo 当前路径是 %cd%

pause

4.复制或移动文件:Copy,Xcopy,Move

copy只能复制文件,不能复制文件夹。

1,单个文件的复制

格式:copy source[drive:][path][filename] [destination [drive:][path][filename]]

即copy 要复制的源文件(包括路径和文件名) 文件复制的目标路径[\文件名],当[destination [drive:][path][filename]]缺省时则为当前目录。

例1, copy c:\123.txt d:\把123.txt复制到d:\目录下。如果此操作成功,命令行窗口中会提示"已复制 1个文件"。

例2, copy c:\123.txt d:\abc.bat把123.txt复制到d:\目录下,并把它修改为abc.bat,这里修改了文件名和它的格式。

例3, copy .\123把当前目录下的123子目录中的文件全部拷到当前目录。

2,批量复制文件

例1,copy c:\123 d:\abc将c:\123 目录中所有文件复制到d:\abc目录中.

例2,copy c:\123\*.rm d:\abc /y将c:\123 目录中所有rm格式的文件复制到d:\abc目录中,当目标目录中已经存在了和源目录中即将复制的文件相同文件名的文件时,就会出现如"改写x:\xx吗?(Yes/No/All):"这样的提示,让你选择是覆盖、不覆盖还是全部覆盖时,通过参数/y(复制单个文件或批量复制时皆可使用),可以实现重名文件无须确认直接覆盖。

3,合并文件:格式:copy /b 文件1+文件2+……文件N 合并后的文件名

例1, copy /b d:\1.mp3+d:\2.mp3 e:\3.mp3把1.mp3和2.mp3合并成3.mp3。

例2, copy /b d:\1.txt+d:\2.mp3把1.txt和2.mp3合并,这里没有指定合成后的文件名哦,缺省情况下,合并后的文件名是命令中的第一个文件的名。在这里,即把2.mp3合并进了1.txt。

★在尾部隐藏了文本数据的图片文件,在使用其他软件进行编辑并保存后,隐藏的文本数据有可能会丢失。

★MP3文件在使用此方法连接后,能实现连续播放。

★合并图片/歌曲这样的二进制文件必须使用/b参数(b代表Binary,二进制),否则合并将会失败;另一个合并参数是/a(a代表ASCII,文本文件),只能用于纯文本的合并。两参数不能全部使用,二进制方式可以合并文本和二进制文件,而文本方式则只能合并文本。

Xcopy可以复制文件和目录树。

XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W] [/C] [/Q] [/F] [/L] [/G] [/H] [/R] [/T]

[/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/EXCLUDE:file1[+file2][+file3]...]

Source:必需的。指定要复制的文件的位置和名称。该参数必须包含驱动器或路径。

Destination 可省略。指定要复制的文件的目标。该参数可以包含驱动器盘符和冒号、目录名、文件名或者它们的组合。如果省略 Destination,xcopy 命令将文件复制到当前目录。

xcopy可使用的参数太多了,这里只选几个常用的来讲一下。

/S 复制非空的目录和子目录。如果省略 /s,xcopy 将在一个目录中工作。

例1,xcopy /s d:\123 e:\kkk\复制d:\123目录下所有文件(夹)到e:\kkk,不包括空的子目录。(默认情况下,xcopy 不复制隐藏或系统文件)

/E 复制所有子目录,包括空目录。全部使用 /e、/s 和 /t 命令行选项。

例2, xcopy /e d:\123 e:\kkk\复制d:\123目录下所有文件(夹)到e:\kkk,包括空的子目录。(默认情况下,xcopy 不复制隐藏或系统文件)

/H 复制具有隐藏和系统文件属性的文件。默认情况下xcopy 不复制隐藏或系统文件。

例3, xcopy /e /h d:\123 e:\kkk\复制d:\123目录下所有文件(夹)到e:\kkk,包括空的子目录。加上了/h参数后,xcopy 复制隐藏或系统的文件

/T 只复制子目录结构(即目录树),不复制文件。要复制空目录,必须包含 /e 选项。

/Y 禁止提示您确认要覆盖现存的目标文件。

当目标目录中已经存在了和源目录中即将复制的文件相同文件名的时候,就会出现"改写 X:\XXX

(Yes/No/All)?"这样的提示,让你选择是覆盖、不覆盖还是全部覆盖时,通过参数/y,可以实现重名文件无须确认直接覆盖。

★注意指定 Destination 是文件还是目录。

如果 Destination 不包含现有目录且不以反斜杠 (\) 结尾,系统将会询问你目标 X:\XXX 是文件名还是目录名(F = 文件,D = 目录)?

如果要将一个或多个文件复制到一个文件,请按 F。如果要将一个或多个文件复制到一个目录,请按 D。

思考:比较一下xcopy /e d:\123 e:\kkk\和 xcopy /e d:\123 e:\kkk 两者之间有什么不同?

两者都是复制d:\123目录下所有文件(夹)到e:\kkk,包括空的子目录,但前者不会询问你目标e:\kkk是文件名还是目录名(F = 文件,D = 目录)?

Move移动文件并重命名文件和目录。

要移动至少一个文件:MOVE [/Y | /-Y] [drive:][path]filename1[,...] destination

要重命名一个目录:MOVE [/Y | /-Y] [drive:][path]dirname1 dirname2

[drive:][path]filename1    指定您想移动的文件位置和名称。

destination   指定文件的新位置。目标可包含一个驱动器号和冒号、一个目录名或组合。如果只移动一个文件并在移动时将其重命名,您还可以包括文件名。

[drive:][path]dirname1    指定要重命名的目录。dirname2                       指定目录的新名称。

/Y        取消确认改写一个现有目标文件的提示。/-Y       对确认改写一个现有目标文件发出提示。

1,移动文件(夹)

基本格式:MOVE [/Y | /-Y] [drive:][path]filename1[,...] destination

[drive:][path]filename1[,...]     想要移动的文件(夹)可以使用相对路径,也可以使用绝对路径,缺省路径情况下默认为当前目录。

Destination     只能是目录路径, 可以使用相对路径,也可以使用绝对路径,缺省路径情况下默认为当前目录。

例1, move d:\abc d:\abcd如果把文件夹abc移到文件夹abcd内。

例2, move 123.txt abc把当前目录下的123.txt移动到当前文件夹abc内。这里都使用了相对路径,缺省路径情况下默认为当前目录。

例3, move 123.txt e:\abc把当前目录下的123.txt移动到e:\abc目录下。

2,重命名文件(夹)

例4, move d:\abc d:\abcd这里要注意一下,如果目标文件夹abcd不存在,则把abc移到d:\下,并把自身名称更改为abcd。利用这一特性,move命令具备重命名功能。

例5, move d:\123.txt d:\abc\456.txt如果 456.txt存在,系统将会提示你:改写 D:\456.txt 吗? (Yes/No/All): 当你输入Y后,则123.txt会覆盖456.txt。如果456.txt不存在,则把123.txt移到d:\abc目录下,并重命名为456.txt。

例6, move /y 123.txt 456.txt如果123.txt和456.txt都存在,通过/y参数后,系统不会提示你,而直接把123.txt覆盖456.txt。

例7, move 123.txt e:\abc\456.txt对于跨区移动,如果456.txt存在会提示:文件存在。命令不会执行;如果456.txt不存在,则把123.txt移动到e:\abc 目录下,并重命名为456.txt。

★MOVE命令可以跨分区移动文件,却不可以跨分区移动文件夹。

★对于跨分区移动文件时,如果目标位置存在和将要移动的文件同名时,系统会提示:"文件存在。" 最后,命令将不会执行。

★对于隐藏或系统属性的文件,只有把它们的属性去除后,move命令才会执行。

总结move A B这样的模式

1、如果A、B同为文件夹名,

      ①如果B存在,则把A移动到B目录下。(如例1);

      ②如果B不存在,则把A移动到B所在的目录下,全部重命名为B。(如例4)。

2、如果A为文件名,

  ① B为文件夹名的时候,将把A移动到B目录下。(如例2,例3);

  ② B为文件名时,如果B存在,则系统会提示你是否将把A重命名为B;如果

         B不存在就把A移动到B所在的目录下的全部,重命名为B。(如例5);

      ③ B所在的位置为另一目录,如果B存在,则命令不执行;如果B不存在,则把A移动到B所在的目录下并重命名为B。(如例7)。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2013-2015 hefei163.com All Right Reserved.  Powered by Discuz! (已备案)

本站信息均由会员发表,不代表合肥社区立场,如侵犯了您的权利请发帖投诉

平平安安
TOP
快速回复 返回顶部 返回列表