批处理·命令行中常用的操作

偶尔会有做点自动化的需求,
以往每次写批处理文件都是现查。
今天把用到的批处理常用操作做个记录。


1.批处理文件的调用与传参

a.bat
./b.bat Hello Wrold

REM 或
REM call b.bat Hello Wrold
b.bat
set param1=%1
set param2=%2
echo %param1%
echo %param2%

以上将分别打出HelloWorld


注意:
  以上 set 命令中,等号前后都没有空格


2.字符串拼接与截取

b.bat
set greeting=%param1%-%param2%
echo %greeting%

以上将输出: Hello-World


3.字符串截取

截取命令格式为

SomeText:~FromIndex:Count

截取示例:

set name=CoderMonkey
echo %name:~0,4%

以上将输出:Code

注:可以反向截取(FromIndex < 0)


4.字符串替换

替换命令格式为

SomeText:source=target

替换示例:

set name=CoderMonkey
echo %name:Monkey=Gorilla%

以上将输出:CoderGorilla


注意:
  字符串中有空格时,需要加引号
  没有空格的话,不必加引号


5.常用的变量

%cd%        current directory,当前目录
%date%     日期
%time%     时刻,包含毫秒

6.创建与删除文件夹

mkdir "foldername"

创建一个文件夹

rmdir "folder_path"

删除指定文件夹

rmdir /s /q "folder_path"

/s 表示删除指定目录及其下的子目录和文件
/q 表示静默处理,不询问


7.删除文件或重命名

del some_path\filename.txt

带 option 参数的删除:(同删除文件夹)

del /s /q d:\temp\test.txt

重命名文件:
格式:rename 路径\文件名.扩展名 新文件名.扩展名

rename d:\temp\test.txt log.txt

注:
  在命令行中,创建与删除文件或文件夹操作,
  不必切换盘符,而切换当前目录需要先切换盘符


8.输出文件,比如log日志

echo "【要输出的文字信息,比如当前日期时刻】%date% %time%" > log.txt

日期会显示为:2019/12/17 的格式,
时刻会输出为:13:58:28.24

如果想把日期时间用作 log 文件名,
由于/:都是不可用于文件名的字符,
这里我们就用到了上面提到的替换功能。

示例:

REM 将`/`跟`:`替换为空
set logfilename=%date:/=%_%time::=_%.txt
echo "%date% %time%Log信息" > "%logfilename%"

这里的 log 文件会在当前执行的路径下生成。
需要在指定路径下生成的话,在 log 文件名用完整路径即可


9.切换目录

进入指定路径,不切换盘符的时候

cd folderA
cd c:\user\folderB

即,可以直接进入当前目录下的某个目录,
或,指定完整路径,进入指定的文件夹

其中,如果不在同一个盘符下,
需要,先切换盘符,如 d:

d:
cd work\tasks\

如上,也可以一次指定两层目录

返回上层目录:cd.. ,cd 后面加两个小点


10.查看当前目录下内容

dir

以上命令输出当前目录下文件夹和文件(仅本层目录)


11.启动其它程序或命令

示例,启动 chrome 浏览器,并打开指定网页

start chrome.exe www.baidu.com

12.注释的写法

12.1 注释的三种方式

REM 注释内容,不会被执行
@REM 同样是注释,不执行
:: 这也是注释内容,不会执行

一种是REM @REM 后面跟注释内容,
另一种是 :: ,两个冒号后面跟注释内容,

注意命令后面的空格

12.2 关于 echo

echo hi!

将会输出 hi!

即,echo 后面的内容会被显示出来。

往往在批处理文件(*.bat)开头处,
设置是否回显,

echo on

echo off

区别是,是否将执行的语句本身显示在命令行。
on 的时候显示,off 的时候不显示,仅打印执行结果。
另外我们在输出 log 文件时也是用到了 echo。

12.3 echo 与注释

echo on 的时候:(只有 REM 会回显)

  • REM 的注释回显
  • @REM 的注释不会回显
  • :: 的注释不会回显

echo off 的时候:(都不回显,没有区别)

  • REM 的注释不回显
  • @REM 的注释不回显
  • :: 的注释不回显

posted on 2019-12-17 13:57  CoderMonkey  阅读(307)  评论(0编辑  收藏  举报

导航