zoukankan      html  css  js  c++  java
  • windows批处理初学贴出一些命令

    在cmd窗口中复制时,右键选标记,然后再选择此时选择区域就变白了。然后要么直接拖到要粘贴的地方,要么直接按回车存到剪贴板里。

    1、循环导入文件夹下面的文件到数据库中

    cd /d D:/Program Files/PostgreSQL/9.2/bin
    for /f "delims=" %%i in ('dir /b *.csv') do
    (
    echo '%%~dpi%%~nxi'>>all.txt
    psql -h 192.168.0.231 -U ***-d *** -p 5432 -c "copy mrs_1 from '%%~dpi%%~nxi' with CSV header"
    )
    echo '导入数据结束!'
    pause

    为什么上面的都用的是双%%?我一直是在命令行中敲的。发现俩%会报错。才知道命令行中只需要一个百分号就行了。


    2、start 调用外部程序该外部程序在新窗口运行,批处理程序继续往下执行
    例 start explorer f:
    call命令是用来调用具有bat或者cmd后缀的文件名。

     

    3、pushd和popd切换当前目录

     

    4、md 创建一个文件夹del删除文件。rd删除目录。md是makedir的简称和md作用一样。


    5、dir c:|find "txt" 打印出c盘下的且包含txt的文件(夹)名


    6、echo test ^>1.txt
    结果则是:test > 1.txt 所以^是转义字符。。^还可以用作续行符。


    7、这里&两边的命令是顺序执行的,从前往后执行

    dir z: & dir y: & dir c: 当第一个命令执行失败了,也不影响后边的命令执行
    dir z: && dir y: && dir c: 第一个命令失败时,后边的命令也不会执行
    在dos下的copy a.txt b.txt /y 相当于将a.txt复制一份存为b.txt不加/y时如果原来存在b.txt会提示是否覆盖b.txt的提示 还是得按y表示yes

     

    8、||这个命令的用法和&&几乎一样,但作用刚好相反:利用||执行多条命令时,当遇到一个执行正确的命令就退出此命令组合,不再继续执行后面的命令

     

    9、知道别人主机的ip想知道其mac地址 用arp -a ip其实 nbtstat也可以看出来其mac地址nbtstat -A ip这个命令是用来查计算机名的(可以再电脑属性更改的实名制名字)。
    (1)netstat命令是显示协议统计信息和当前tcp/ip网络连接的 加上-o后会多显示一列即跟端口号对应的PID
    (2)tasklist /V 显示的是进程名、端口号、内存使用、用户名等具体信息。所以可以从netstat中找到pid然后用该pid在tasklist中找到进程名。
    (3)删除某个进程:命令格式:ntsd -c q -p pid 按进程号杀;ntsd -c q -pn ***.exe 按进程名杀;taskkill /pid pid /f 按进程号杀。其中/f是强行杀掉的意思。

     

    10、IF命令
    (1)IF [NOT] ERRORLEVEL number command 当errorlevel为0时说明上一句命令的执行结果是正确的。
    有的资料上说 这种写法指errorlevel >= 0时执行命令 若要等于0才执行则用if %errorlevel% == 0 (do something)

    (2)IF [NOT] string1==string2 command
    当比较string1和string2时如果不想区分大小写那么就在if 后面加个/i

    (3)IF [NOT] EXIST filename command
    if中还有一些判断数字大小的符号
    EQU - 等于 NEQ - 不等于 LSS - 小于 LEQ - 小于或等于 GTR - 大于 GEQ - 大于或等于
    我觉得还是直接用大于小于号方便。。。

    (4)对于if else语句得按下列格式
    IF EXIST filename (
    del filename
    ) ELSE (
    echo filename missing
    )
    这个例子里面有两点必须遵守<1>左括号必须和if或者else在同一行。不然会报语法不正确的提示
    <2>else 必须和if中的最后一句在一行。。不然会报else不是内部或外部命令的提示。

     

    11、date 显示当前日期,提示输入新日期。如果只想看当前日期不想输入新日期。可以 加个/t和time的用法一样
    time /t 只显示当前时间而不提示输入新时间


    12、sort排序命令可以排文件可以排命令结果,一个是用 < 从文件读,一个是用|排序前面命令的结果
    例sort < list.txt > alphlist.txt find "Jones" maillst.txt | sort
    sort输出排序结果到文件中可以利用/o后面加文件 而不用重定向

     

    13、more命令:可以直接单独用也可以在管道符后面用来一屏屏显示命令结果
    more后面带/s参数表示把多个空行输出成一个空行
    more 后面的文件可以是多个按空格分开,它会一个文件接一个文件的显示
    当使用more后会出来——More——这时要是输入=号就会显示现在显示到第多少行了.按q会退出.按F会从下一个文件开始显示.最基本的是空格显示下一屏,回车显示下一行

     

    14、find命令:
    find [/v] [/c] [/n] "string" [[drive:][path]filename[...]] 省略号表示可以在多个文件中查找
    参数
    /v 显示未包含指定字符串的所有行。
    /c 只显示包含指定字符串的行数。
    /n 将文件行号置于每行开头。
    /I 指定搜索不区分大小写。

     

    15、批处理的注释:有两种
    (1)rem 后面跟的是程序的注释命令.
    (2)::也可以用作注释,其实如果一个后面紧跟字母或者数字则是用于goto语句跳转的地方,所以:后面跟非字母或数字都可以用作注释。

    16、echo和@
    其中的echo off 和命令前加@,这俩命令如果在cmd窗口中输就看不出来效果,只能看出来前面的盘符路径>不见了全是黑屏了。所以只有在bat文件中用上这俩命令才能看出来效果,因为在执行bat文件时,每一句命令都会先显示在cmd窗口中然后再出来结果,所以这个时候echo off 或者前面加@就可以看出来只显示执行结果而没有命令显示。
    echo off 将以后的命令屏蔽显示,但它自身无法屏蔽,所以通常在echo off前面要加一个@

     

    17、PAUSE暂停键相当于c++里面的#include<stdlib> system(pause);
    运行显示:
    请按任意键继续. . .


    18、title 用来修改cmd窗口的名字。比如title houjiao 那个黑框的左上角名字就成houjiao了

     

    19、COLOR 后面由两个连着的十六进制数字构成。第一个十六进制表示cmd窗口的背景颜色,第二个十六进制表示cmd窗口中
    0到7是由黑色、蓝色、绿色、湖蓝、红色、紫色、黄色、白色
    8到F是对应的上述颜色的淡色版

     

    20、set这个命令不仅可以设置环境变量还可以设置自定义变量,还可以进行字符串处理是个硬角色。

    (1)set的用法SET [variable=[string]] 或者SET /P variable=[promptString]其中/p指的是promptstring是提示符而不是真正bariable的值。真正的值是需要用户下来输入的。跟scanf的作用一样。那怎么样设置一个变量用来进行表达式计算呢?用set /A variable+=1(相当于variable=variable+1) 这时会把等于号后面的当表达式而不是字符串。当定义变量后如果要用该变量则需要用%%将变量名夹在中间。
    当用/a时 如果等于号后面的是逻辑运算比如&时那不能直接用1&1而应该给&加上双引号。上面的用法可以用一个例子表示set /p hj=please input expression 按回车后 输入1"&"1 按回车后 set /a result=%hj% 再按回车。。就会看到结果。

    (2)用set处理字符串:
    <1>首先可以进行字符串替换 例如先初始化一个变量a:set a= bbs. verybat. cn
    将a中的空格删掉 则可以set %a: =%就行了,解释一下%a:str1=str2%就是把变量%a%的里的str1全部用str2替换.

    <2>其次可以进行字符串截断 例如先初始化一个变量b:set b=bbs.verybat.cn字符串截断的全部用法为下面5种可以将~当做截断字符串的标志:
    %b:~1,2% =“bs” 偏移量1,从第二位开始向右取2 位
    %b:~-3% =“.cn” 从倒数第三位往后取完。
    %b:~3% =“.verybat.cn” 从正数第三位往后取完。(只有一个参数说明后面的参数默认为取到结尾)
    %b:~0,-3% =“bbs.verybat” 从开始取到倒数第三个。
    %b:~2,-3% =“s.verybat” 偏移为2,从第三个开始取到倒数第三个。

     

    21、变量延迟
    假设有这么个bat
    @echo off
    set a=4
    set a=5 & echo %a%
    pause
    那么结果是4。。。而不是五。这就是变量延迟。指的是变量的值只从该一行命令上面的赋值得来。
    至于为什么我也不知道。。所以这时候需要启用变量延迟,固定的命令是这么写的setlocal enabledelayedexpansion要结束变量延迟则用 endlocal就可以。

     

    22、各种符号
    其中逗号、分号都是和空格的作用一样,没事就别用这些了空格就够了我觉得,而感叹号是在变量延迟问题中用来包变量的。即把%a%写成!a!可是我在开启变量延迟之后还是用的%a%也没有错,
    反而!a!报错。。不知道为啥了反正以后都用百分号就行了。
    小括号中的命令会被看成是一条命令。可以在for语句和if语句中使用也可以单独使用。
    双引号是字符串界定符加上双引号字符串中就可以加空格之类的。

     

    23、for循环

    格式:FOR 参数 %%变量名 IN (SET) DO 执行的命令
    其中SET指的是相关文件或命令命令用单引号括起来,相关文件用字符串括起来。
    for的参数有4个分别为/d /r /l /f
    (1)/d 参数:在SET中有通配符*或?时,只是循环执行SET中的文件夹名字而不会执行文件夹中的文件。

    (2)/r 参数:这个参数后面得加目录,同样当SET中有通配符时他会把/r 后面指定的目录及其下面的所有子目录中与set相符合的所有文件名都列举出来。但是/r 在set中没有通配符时还会做操作就是将所有含有该文件的目录都列出来。例如for /r c: %%i in (*.exe) do echo %%i

    (3)/l参数:其中的SET就需要换成三个用逗号隔开的数字分别代表start,step,end。表示从数字start开始到end结束步长为step来设置变量。比如for /l %%i in (1,1,5) do start cmd就会打开5个cmd窗口。

    (4)/f参数:这个参数是读取文件中最常用的一个也是最复杂的一个
    FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]其中file-set是文件名不能有空格
    FOR /F ["options"] %variable IN ("string") DO command [command-parameters]其中string表示字符串
    FOR /F ["options"] %variable IN ('command') DO command [command-parameters]单引号表示执行命令

    option有5个参数用一个例子来说明就是
    FOR /F "usebackq eol=; tokens=1,3* delims=, " %%i in ("program files") do echo %%i %%j %%k
    其中usebackq参数表示后面双引号引的是文件名而不是字符串。
    eol=;表示跳过以分号开头的行不读。
    tokens=1,3* 表示按照后面的逗号和空格将一行分为若干段,将第一段赋值给%%i,将第三段赋值给%%j,将后面所有的段赋值给%%k。
    delims=, 表示按,和 分割行,其中的空格必须放在最后,否则会报错。那个*还可以写成4-10意思是第四段到第十段。

    在for中变量可以替换为一些其他的写法,作用也不一样,具体的for /? 然后再最后面一屏会看到。经常用的是俩%~dpi其中i是for本来的变量。意思是将%i扩充到一个驱动器号和路径。如果原来%i是一个文件,则你echo 后就会显示哪个盘哪个目录下的文件。

     后续学到其他的再进行总结补充。                                                                                                                    -jimmy-hou-

  • 相关阅读:
    tar.gz 查看原文件大小
    ssh2 和 ssh 的公钥转换
    MySQL binlog 导入
    app自动测试-微信(android)-web-1
    crontab中执行java程序的脚本
    tomcat 启动慢解决(/dev/random)
    app自动测试-微信(iOS)-web-1
    git
    java.lang.OutOfMemoryError: unable to create new native thread
    docker (centOS 7) 使用笔记6
  • 原文地址:https://www.cnblogs.com/tears-of-ramos/p/3401499.html
Copyright © 2011-2022 走看看