windows cmd批处理

来源:互联网 发布:linux mysql开始连接 编辑:程序博客网 时间:2024/05/23 19:13

for

C:\Users\llq\Desktop>for /?对一组文件中的每一个文件执行某个特定命令。FOR %variable IN (set) DO command [command-parameters]  %variable  指定一个单一字母可替换的参数。  (set)      指定一个或一组文件。可以使用通配符。  command    指定对每个文件执行的命令。  command-parameters             为特定命令指定参数或命令行开关。在批处理程序中使用 FOR 命令时,指定变量请使用 %%variable而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.如果启用命令扩展,则会支持下列 FOR 命令的其他格式:FOR /D %variable IN (set) DO command [command-parameters]    如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]    检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。    如果在 /R 后没有指定目录规范,则使用当前目录。如果集仅为一个单点(.)字符,    则枚举该目录树。FOR /L %variable IN (start,step,end) DO command [command-parameters]    该集表示以增量形式从开始到结束的一个数字序列。因此,(1,1,5)将产生序列    1 2 3 4 5,(5,-1,1)将产生序列(5 4 3 2 1)FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]FOR /F ["options"] %variable IN ("string") DO command [command-parameters]FOR /F ["options"] %variable IN ('command') DO command [command-parameters]    或者,如果有 usebackq 选项:FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]FOR /F ["options"] %variable IN ("string") DO command [command-parameters]FOR /F ["options"] %variable IN ('command') DO command [command-parameters]    fileset 为一个或多个文件名。继续到 fileset 中的下一个文件之前,    每份文件都被打开、读取并经过处理。处理包括读取文件,将其分成一行行的文字,    然后将每行解析成零或更多的符号。然后用已找到的符号字符串变量值调用 For 循环。    以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白行。    您可通过指定可选 "options" 参数替代默认解析操作。这个带引号的字符串包括一个    或多个指定不同解析选项的关键字。这些关键字为:        eol=c           - 指一个行注释字符的结尾(就一个)        skip=n          - 指在文件开始时忽略的行数。        delims=xxx      - 指分隔符集。这个替换了空格和跳格键的                          默认分隔符集。        tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代                          的 for 本身。这会导致额外变量名称的分配。m-n                          格式为一个范围。通过 nth 符号指定 mth。如果                          符号字符串中的最后一个字符星号,                          那么额外的变量将在最后一个符号解析之后                          分配并接受行的保留文本。        usebackq        - 指定新语法已在下类情况中使用:                          在作为命令执行一个后引号的字符串并且一个单                          引号字符为文字字符串命令并允许在 file-set                          中使用双引号扩起文件名称。    某些范例可能有助:FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k    会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将    每行中的第二个和第三个符号传递给 for 函数体,用逗号和/或    空格分隔符号。请注意,此 for 函数体的语句引用 %i 来    获得第二个符号,引用 %j 来获得第三个符号,引用 %k    来获得第三个符号后的所有剩余符号。对于带有空格的文件    名,您需要用双引号将文件名括起来。为了用这种方式来使    用双引号,还需要使用 usebackq 选项,否则,双引号会    被理解成是用作定义某个要分析的字符串的。    %ifor 语句中显式声明,%j%k 是通过    tokens= 选项隐式声明的。可以通过 tokens= 一行    指定最多 26 个符号,只要不试图声明一个高于字母 "z""Z" 的变量。请记住,FOR 变量是单一字母、分大小写和全局的变量;    而且,不能同时使用超过 52 个。    还可以在相邻字符串上使用 FOR /F 分析逻辑,方法是,    用单引号将括号之间的 file-set 括起来。这样,该字符    串会被当作一个文件中的一个单一输入行进行解析。    最后,可以用 FOR /F 命令来分析命令的输出。方法是,将    括号之间的 file-set 变成一个反括字符串。该字符串会    被当作命令行,传递到一个子 CMD.EXE,其输出会被捕获到    内存中,并被当作文件分析。如以下例子所示:      FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i    会枚举当前环境中的环境变量名称。另外,FOR 变量参照的替换已被增强。您现在可以使用下列选项语法:     %~I          - 删除任何引号("),扩展 %I     %~fI        - 将 %I 扩展到一个完全合格的路径名     %~dI        - 仅将 %I 扩展到一个驱动器号     %~pI        - 仅将 %I 扩展到一个路径     %~nI        - 仅将 %I 扩展到一个文件名     %~xI        - 仅将 %I 扩展到一个文件扩展名     %~sI        - 扩展的路径只含有短名     %~aI        - 将 %I 扩展到文件的文件属性     %~tI        - 将 %I 扩展到文件的日期/时间     %~zI        - 将 %I 扩展到文件的大小     %~$PATH:I   - 查找列在路径环境变量的目录,并将 %I 扩展                   到找到的第一个完全合格的名称。如果环境变量名                   未被定义,或者没有找到文件,此组合键会扩展到                   空字符串可以组合修饰符来得到多重结果:     %~dpI       - 仅将 %I 扩展到一个驱动器号和路径     %~nxI       - 仅将 %I 扩展到一个文件名和扩展名     %~fsI       - 仅将 %I 扩展到一个带有短名的完整路径名     %~dp$PATH:I - 搜索列在路径环境变量的目录,并将 %I 扩展                   到找到的第一个驱动器号和路径。     %~ftzaI     - 将 %I 扩展到类似输出线路的 DIR在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名比较易读,而且避免与不分大小写的组合键混淆。C:\Users\llq\Desktop>

set

C:\Users\llq>set /?显示、设置或删除 cmd.exe 环境变量。SET [variable=[string]]  variable  指定环境变量名。  string    指定要指派给变量的一系列字符串。要显示当前环境变量,键入不带参数的 SET。如果命令扩展被启用,SET 会如下改变:可仅用一个变量激活 SET 命令,等号或值不显示所有前缀匹配SET 命令已使用的名称的所有变量的值。例如:    SET P会显示所有以字母 P 打头的变量如果在当前环境中找不到该变量名称,SET 命令将把 ERRORLEVEL设置成 1SET 命令不允许变量名含有等号。在 SET 命令中添加了两个新命令行开关:    SET /A expression    SET /P variable=[promptString]/A 命令行开关指定等号右边的字符串为被评估的数字表达式。该表达式评估器很简单并以递减的优先权顺序支持下列操作:    ()                  - 分组    ! ~ -               - 一元运算符    * / %               - 算数运算符    + -                 - 算数运算符    << >>               - 逻辑移位                       - 按位“与”    ^                   - 按位“异”    |                   - 按位“或”    = *= /= %= += -=    - 赋值      &= ^= |= <<= >>=    ,                   - 表达式分隔符如果您使用任何逻辑或取余操作符, 您需要将表达式字符串用引号扩起来。在表达式中的任何非数字字符串键作为环境变量名称,这些环境变量名称的值已在使用前转换成数字。如果指定了一个环境变量名称,但未在当前环境中定义,那么值将被定为零。这使您可以使用环境变量值做计算而不用键入那些 % 符号来得到它们的值。如果 SET /A 在命令脚本外的命令行执行的,那么它显示该表达式的最后值。该分配的操作符在分配的操作符左边需要一个环境变量名称。除十六进制有 0x 前缀,八进制有 0 前缀的,数字值为十进位数字。因此,0x12 与 18022相同。请注意八进制公式可能很容易搞混: 0809 是无效的数字,因为 89 不是有效的八进制位数。(& )/P 命令行开关允许将变量数值设成用户输入的一行输入。读取输入行之前,显示指定的 promptString。promptString 可以是空的。环境变量替换已如下增强:    %PATH:str1=str2%会扩展 PATH 环境变量,用 "str2" 代替扩展结果中的每个 "str1"。要有效地从扩展结果中删除所有的 "str1","str2" 可以是空的。"str1" 可以以星号打头;在这种情况下,"str1" 会从扩展结果的开始到 str1 剩余部分第一次出现的地方,都一直保持相配。也可以为扩展名指定子字符串。    %PATH:~10,5%会扩展 PATH 环境变量,然后只使用在扩展结果中从第 11 个(偏移量 10)字符开始的五个字符。如果没有指定长度,则采用默认值,即变量数值的余数。如果两个数字(偏移量和长度)都是负数,使用的数字则是环境变量数值长度加上指定的偏移量或长度。    %PATH:~-10%会提取 PATH 变量的最后十个字符。    %PATH:~0,-2%会提取 PATH 变量的所有字符,除了最后两个。终于添加了延迟环境变量扩充的支持。该支持总是按默认值被停用,但也可以通过 CMD.EXE 的 /V 命令行开关而被启用/停用。请参阅 CMD /?考虑到读取一行文本时所遇到的目前扩充的限制时,延迟环境变量扩充是很有用的,而不是执行的时候。以下例子说明直接变量扩充的问题:    set VAR=before    if "%VAR%" == "before" (        set VAR=after        if "%VAR%" == "after" @echo If you see this, it worked    )不会显示消息,因为在读到第一个 IF 语句时,BOTH IF 语句中的 %VAR% 会被代替;原因是: 它包含 IF 的文体,IF 是一个复合语句。所以,复合语句中的 IF 实际上是在比较 "before" 和"after",这两者永远不会相等。同样,以下这个例子也不会达到预期效果:    set LIST=    for %i in (*) do set LIST=%LIST% %i    echo %LIST%原因是,它不会在目前的目录中建立一个文件列表,而只是将LIST 变量设成找到的最后一个文件。这也是因为 %LIST%FOR 语句被读取时,只被扩充了一次;而且,那时的 LIST 变量是空的。因此,我们真正执行的 FOR 循环是:    for %i in (*) do set LIST= %i这个循环继续将 LIST 设成找到的最后一个文件。延迟环境变量扩充允许您使用一个不同的字符(惊叹号)在执行时间扩充环境变量。如果延迟的变量扩充被启用,可以将上面例子写成以下所示,以达到预期效果:    set VAR=before    if "%VAR%" == "before" (        set VAR=after        if "!VAR!" == "after" @echo If you see this, it worked    )    set LIST=    for %i in (*) do set LIST=!LIST! %i    echo %LIST%如果命令扩展被启用,有几个动态环境变量可以被扩展,但不会出现在 SET 显示的变量列表中。每次变量数值被扩展时,这些变量数值都会被动态计算。如果用户用这些名称中任何一个明确定义变量,那个定义会替代下面描述的动态定义:%CD% - 扩展到当前目录字符串。%DATE% - 用跟 DATE 命令同样的格式扩展到当前日期。%TIME% - 用跟 TIME 命令同样的格式扩展到当前时间。%RANDOM% - 扩展到 032767 之间的任意十进制数字。%ERRORLEVEL% - 扩展到当前 ERRORLEVEL 数值。%CMDEXTVERSION% - 扩展到当前命令处理器扩展版本号。%CMDCMDLINE% - 扩展到调用命令处理器的原始命令行。%HIGHESTNUMANODENUMBER% - 扩展到此计算机上的最高 NUMA 节点号。C:\Users\llq>

type

C:\Users\llq>type /?显示文本文件的内容。TYPE [drive:][path]filenameC:\Users\llq>

shift

C:\Users\llq>shift /?更改批处理文件中可替换参数的位置。SHIFT [/n]如果命令扩展被启用,SHIFT 命令支持/n 命令行开关;该命令行开关告诉命令从第 n 个参数开始移位;n 介于零和八之间。例如:    SHIFT /2会将 %3 移位到 %2,将 %4 移位到 %3,等等;并且不影响 %0%1。C:\Users\llq>

rem

C:\Users\llq>rem /?在批处理文件或 CONFIG.SYS 里加上注解或说明。REM [comment]C:\Users\llq>

注:

使用rem命令时应该把回显关闭,否则会把整行rem信息输出到屏幕

start

C:\Users\llq>start /?启动一个单独的窗口运行指定的程序或命令。START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]      [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]      [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]      [command/program] [parameters]    "title"     在窗口标题栏中显示的标题。    path        启动目录。    B           启动应用程序,但不创建新窗口。应用程序已忽略 ^C 处理。                除非应用程序启用 ^C 处理,否则 ^Break 是唯一可以中断                该应用程序的方式。    I           新的环境将是传递给 cmd.exe 的原始环境,而不是当前环境。    MIN         以最小化方式启动窗口。    MAX         以最大化方式启动窗口。    SEPARATE    在单独的内存空间中启动 16 位 Windows 程序。    SHARED      在共享内存空间中启动 16 位 Windows 程序。    LOW         在 IDLE 优先级类中启动应用程序。    NORMAL      在 NORMAL 优先级类中启动应用程序。    HIGH        在 HIGH 优先级类中启动应用程序。    REALTIME    在 REALTIME 优先级类中启动应用程序。    ABOVENORMAL 在 ABOVENORMAL 优先级类中启动应用程序。    BELOWNORMAL 在 BELOWNORMAL 优先级类中启动应用程序。    NODE        将首选非一致性内存结构 (NUMA) 节点指定为十进制整数。    AFFINITY    将处理器关联掩码指定为十六进制数字。进程被限制在这些                处理器上运行。                当 /AFFINITY 和 /NODE 结合时,会对关联掩码进行不同的解释                指定关联掩码,正如 NUMA 节点的处理器掩码正确移动到零位                起始位置一样。进程被限制在指定关联掩码和 NUMA 节点之间的                那些通用处理器上运行。如果没有通用处理器,则进程被限制在                指定的 NUMA 节点上运行。    WAIT        启动应用程序并等待它终止。    command/program                如果它是内部 cmd 命令或批文件,则该命令处理器是使用                cmd.exe 的 /K 开关运行的。这表示运行该命令之后,该窗口                将仍然存在。                如果它不是内部 cmd 命令或批文件,则它就是一个程序,并将                作为一个窗口化应用程序或控制台应用程序运行。    parameters  这些是传递给 command/program 的参数。注意: 在 64 位平台上不支持 SEPARATE 和 SHARED 选项。通过指定 /NODE,可按照利用 NUMA 系统中的内存区域的方式创建进程。例如,可以创建两个完全通过共享内存互相通信的进程以共享相同的首选 NUMA 节点,从而最大限度地减少内存延迟。如有可能,它们即会分配来自相同 NUMA 节点的内存,并且会在指定节点之外的处理器上自由运行。    启动 /NODE 1 application1.exe    启动 /NODE 1 application2.exe这两个进程可被进一步限制在相同 NUMA 节点内的指定处理器上运行。在以下示例中, application1 在节点的两个低顺序处理器上运行,而 application2在该节点的其后两个处理器上运行。该示例假定指定节点至少具有四个逻辑处理器。请注意,节点号可更改为该计算机的任何有效节点号,而无需更改关联掩码。    启动 /NODE 1 /AFFINITY 0x3 application1.exe    启动 /NODE 1 /AFFINITY 0xc application2.exe如果命令扩展被启用,通过命令行或 START 命令的外部命令调用会如下改变:将文件名作为命令键入,非可执行文件可以通过文件关联调用。    (例如,WORD.DOC 会调用跟 .DOC 文件扩展名关联的应用程序)。    关于如何从命令脚本内部创建这些关联,请参阅 ASSOC 和     FTYPE 命令。执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用    程序终止就返回命令提示符。如果在命令脚本内执行,该新行为    则不会发生。如果执行的命令行的第一个符号是不带扩展名或路径修饰符的    字符串 "CMD""CMD" 会被 COMSPEC 变量的数值所替换。这    防止从当前目录提取 CMD.EXE。如果执行的命令行的第一个符号没有扩展名,CMD.EXE 会使用    PATHEXT 环境变量的数值来决定要以什么顺序寻找哪些扩展    名。PATHEXT 变量的默认值是:        .COM;.EXE;.BAT;.CMD    请注意,该语法跟 PATH 变量的一样,分号隔开不同的元素。查找可执行文件时,如果没有相配的扩展名,看一看该名称是否与目录名相配。如果确实如此,START 会在那个路径上调用Explorer。如果从命令行执行,则等同于对那个路径作 CD /D。C:\Users\llq>

dir

C:\Users\llq>dir /?显示目录中的文件和子目录列表。DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]  [/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]  [drive:][path][filename]              指定要列出的驱动器、目录和/或文件。  /A          显示具有指定属性的文件。  属性         D  目录                R  只读文件               H  隐藏文件            A  准备存档的文件               S  系统文件            I  无内容索引文件               L  解析点             -  表示“否”的前缀  /B          使用空格式(没有标题信息或摘要)。  /C          在文件大小中显示千位数分隔符。这是默认值。用 /-C 来              禁用分隔符显示。  /D          跟宽式相同,但文件是按栏分类列出的。  /L          用小写。  /N          新的长列表格式,其中文件名在最右边。  /O          用分类顺序列出文件。  排列顺序     N  按名称(字母顺序)     S  按大小(从小到大)               E  按扩展名(字母顺序)   D  按日期/时间(从先到后)               G  组目录优先           -  反转顺序的前缀  /P          在每个信息屏幕后暂停。  /Q          显示文件所有者。  /R          显示文件的备用数据流。  /S          显示指定目录和所有子目录中的文件。  /T          控制显示或用来分类的时间字符域。  时间段      C  创建时间              A  上次访问时间              W  上次写入的时间  /W          用宽列表格式。  /X          显示为非 8.3 文件名产生的短名称。格式是 /N 的格式,              短名称插在长名称前面。如果没有短名称,在其位置则              显示空白。  /4          用四位数字显示年可以在 DIRCMD 环境变量中预先设定开关。通过添加前缀 - (破折号)来替代预先设定的开关。例如,/-W。C:\Users\llq>

setlocal

C:\Users\llq>setlocal /?开始批处理文件中环境改动的本地化操作。在执行 SETLOCAL 之后所做的环境改动只限于批处理文件。要还原原先的设置,必须执行 ENDLOCAL。达到批处理文件结尾时,对于该批处理文件的每个尚未执行的 SETLOCAL 命令,都会有一个隐含的 ENDLOCAL 被执行。SETLOCAL如果命令扩展被启用,SETLOCAL 会如下改变:SETLOCAL 批命令现在可以接受可选参数:        ENABLEEXTENSIONS / DISABLEEXTENSIONS            启用或禁用命令处理器扩展。这些            参数比 CMD /E:ON 或 /E:OFF            开关有优先权。请参阅 CMD /? 获取详细信息。        ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION            启用或禁用延缓环境变量            扩展。这些参数比 CMD            /V:ON 或 /V:OFF 开关有优先权。请参阅 CMD /? 获取详细信息。无论在 SETLOCAL 命令之前它们的设置是什么,这些修改会一直保留到匹配的 ENDLOCAL 命令。如果有一个参数,SETLOCAL 命令将设置 ERRORLEVEL 的值。如果有两个有效参数中的一个,该值则为零。用下列技巧,您可以在批脚本中使用这个来决定扩展是否可用:    VERIFY OTHER 2>nul    SETLOCAL ENABLEEXTENSIONS    IF ERRORLEVEL 1 echo Unable to enable extensions这个方法之所以有效,是因为在 CMD.EXE 的旧版本上,SETLOCAL未设置 ERRORLEVEL 值。具有不正确参数的 VERIFY 命令将ERRORLEVEL 值初始化成非零值。C:\Users\llq>

ren

C:\Users\llq>ren /?重命名文件。RENAME [drive:][path]filename1 filename2.REN [drive:][path]filename1 filename2.请注意,您不能为目标文件指定新的驱动器或路径。C:\Users\llq>

move

C:\Users\llq>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                     对确认覆盖一个现有目标文件发出提示。命令行开关 /Y 可以出现在 COPYCMD 环境变量中。这可以用命令行上的 /-Y 替代。默认值是,除非 MOVE 命令是从一个批脚本内执行的,覆盖时都发出提示。C:\Users\llq>

csdn

C:\Users\llq>title /?设置命令提示窗口的窗口标题。TITLE [string]  string       指定命令提示窗口的标题。C:\Users\llq>
0 0
原创粉丝点击