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-

 

posted @ 2013-11-01 12:23  风猴蓝魔  阅读(946)  评论(0编辑  收藏  举报