windows CMD命令的一些使用方法及注意事项

windows CMD命令的一些使用方法及注意事项

转载请著名出处:https://www.cnblogs.com/funnyzpc/p/17572397.html

一.执行路径或参数带中文、空格、特殊字符、数字问题

首先说不论是执行路径还是脚本参数均不能包含或使用这四类字符[中文空格特殊字符数字]

执行路径还是变量是一定不可以以数字开头的,变量也不建议使用纯数字,例如:
在cmd窗口定义并执行:

E:selfmee_fullblogsbintmp>set 234=hello E:selfmee_fullblogsbintmp>call echo %234% hello 

看起来是没什么问题,但是我们将命令写在cmd文件内看一下:

  • 定义exec.cmd文件内容
set 234=hello call echo %234% 
  • 执行exec.cmd
E:selfmee_fullblogsbintmp>exec.cmd E:selfmee_fullblogsbintmp>set 234=hello E:selfmee_fullblogsbintmp>call echo 34 34  

可看到输出的是34,这明显是错误的,这种情况一定要具体实践才会明白,一定要留意~

如果路径中出现空格或者中文一定建议您用双引号(英文输入法下的)包起来 : /目录1/目录2/命令

  • 如下例:
  E:selfmee_fullblogsbin哈了tmp>E:selfmee_fullblogsbintmpzip -r ../qq.zip ./files 'E:selfmee_fullblogsbin哈了' 不是内部或外部命令,也不是可运行的程序 或批处理文件。  E:selfmee_fullblogsbintmp> 

使用双引号包起来就没问题了:

E:selfmee_fullblogsbin哈了tmp> E:selfmee_fullblogsbin哈了tmp>"E:selfmee_fullblogsbintmpzip" -r ../qq.zip ./files updating: files/DateUtil.java (172 bytes security) (deflated 70%) updating: files/DelayTask.java (172 bytes security) (deflated 48%) updating: files/excel/ (260 bytes security) (stored 0%) updating: files/excel/CellBaseType.java (172 bytes security) (deflated 64%) updating: files/excel/CellFmt.java (172 bytes security) (deflated 67%) updating: files/excel/ExcelDataReflectUtil.java (172 bytes security) (deflated 73%) updating: files/excel/ExcelReadUtil.java (172 bytes security) (deflated 85%) updating: files/excel/ExcelWriteUtil.java (172 bytes security) (deflated 81%) updating: files/excel/PoiCellProcess.java (172 bytes security) (deflated 84%) updating: files/excel/PoiCellStyleProcess.java (172 bytes security) (deflated 74%)  

二.脚本文件命令连续执行换行问题

连续执行问题之前也一直困扰着我,后来不断实践倒有了些心得~

if exist 这类开头的判断命令则不存在多条命令连续执行换行停止问题.

对于像echodirzipmvnjava等等这类命令,建议命令前加一个call即可~

example:

E:selfmee_fullblogsbintmp> E:selfmee_fullblogsbintmp>call echo hello hello  E:selfmee_fullblogsbintmp>call dir 驱动器 E 中的卷是 DATA 卷的序列号是 DA15-004D  E:selfmee_fullblogsbintmp 的目录  2023/07/20  14:47    <DIR>          . 2023/07/20  14:47    <DIR>          .. 2018/12/01  23:15            69,120 bzip2.dll 2023/07/20  14:48                34 exec.cmd 2023/07/20  11:07    <DIR>          files 2018/12/01  23:15           237,056 zip.exe               3 个文件        306,210 字节               3 个目录 925,669,171,200 可用字节  

尤其是命令放在cmdbat文件内时一定要使用call

三.变量定义及引用问题

变量被引用的前提是一定要被定义,不论是来自于命令行还是来自于set命令定义的,都需要有!

首先说如何定义吧~

1.在执行脚本文件命令行定义

比如这样

E:selfmee_fullblogsbintmp>exec.cmd aa bb cc E:selfmee_fullblogsbintmp>exec.bat aa bb cc 

exec脚本文件内接收这三个参数(aa,bb,cc)需使用参数索引获得:

set VALUE1=%1% // aa set VALUE2=%2% // bb set VALUE3=%3% // cc 

上面是定义了接收变量的,实际也可以不使用接收变量~

2.在cmd执行命令行(裸命令)或脚本文件内

声明: set aa=hello

使用: echo %aa% or call echo %aa%

example:

E:selfmee_fullblogsbintmp>set aa=hello E:selfmee_fullblogsbintmp>echo %aa% hello  

注意:定义的变量名强烈建议使用大写,使用时更易分辨!

四.批量压缩文件问题

windows并未内置zip相关命令工具,不论是cmd还是powershell都没有,所以这就需要我们自行安装zip相关工具。
windows下可以实现zip相关功能的工具大概有这俩,这是我用到过的:

1.使用7z

这个工具十分好用,既可以GUI操作,也可以使用命令行操作,使用命令行则为:

%---- 若 7z.exe 安装在这个地方 ---% C:Program Files7-Zip7z.exe  %---- 则具体执行命令 ---% "C:Program Files7-Zip7z"  a 压缩后的文件.zip 文件夹或文件 

7z请自行搜素下载,这里不提供哈~

2.使用bzip2

这是个命令行用的bzip2工具。
具体使用如下:

%----若 7z.exe 安装在这个地方 ---% D:zipszip.exe   %---- 执行的命令 ---%  D:zipszip -r 压缩后的文件.zip 文件夹或文件 

bzip2工具在autoDeploy内有提供,也可以去bzip官网下载

五.命令换行问题

这个问题其实很简单,命令行尾用 ^ 就好

example:

call  命令第一部分 ^   命令第二部分 

六.忽略执行及多条命令执行问题

多条命令一般用这三类操作符分割 & && ||

  • & 操作符

    命令1 & 命令2

先执行命令1再执行命令2命令1不论执行成功与否都会执行命令2,这样就起到了忽略错误命令行

  • && 操作符

    命令1 && 命令2

先执行命令1再执行命令2命令1执行成功才会执行命令2,命令有前后依赖会用到此操作符

example:

xcopy hello.txt D:  /s /e /y && (echo ok ) || (echo error) 

因为有的命令会返回操作状态(成功/失败),&&也可接收这一状态并判断

  • | 操作符

    命令1 | 命令2

管道操作符,命令1命令2的操作对象,例如:

E:selfmee_fullblogstmpfiles>echo hello youth | findstr "y" hello youth 
  • || 操作符

    命令1 || 命令2

就是命令1出错、运行不成功才执行命令2

*单条批量执行脚本样例

@echo off  %chcp 65001%  %-----必要参数(需要填的!)-----% %项目目录% set PROJECT_DIR=D:workspacemee-web %工具7z安装目录% set ZIP_EXEC_PATH="C:Program Files7-Zip7z" %压缩文件包名称% set FILE_NAME=mee-web.zip  %服务器IP% set SSH_IP=192.168.76.60 %服务器端口% set SSH_PORT=22 %服务器登录用户% set SSH_USER=root %服务器登录密码% set SSH_PASSWORD=root@1233 %服务器工作目录% set SSH_DIR=/home/nginx/tmp %其他变量(不用动),输出当前路径%  set BAT_PATH=%cd%  %-----打包&构建-----% call cd %PROJECT_DIR% ^     & rd/s/q dist ^     & del /a/f/q %FILE_NAME% ^     & npm run build:uat --scripts-prepend-node-path=auto ^     && %ZIP_EXEC_PATH%  a %FILE_NAME% ./dist/** ^     && echo upload file to server... ^     && cd %BAT_PATH% ^     && %BAT_PATH%binpscp  -P %SSH_PORT% -pw %SSH_PASSWORD% %PROJECT_DIR%%FILE_NAME% %SSH_USER%@%SSH_IP%:%SSH_DIR% ^     && echo invoke server command... ^     && %BAT_PATH%binplink -pw %SSH_PASSWORD% -P %SSH_PORT%  %SSH_USER%@%SSH_IP% "cd %SSH_DIR% && unzip -o %FILE_NAME% && rm -rf %FILE_NAME%" ^     && echo success! ^     && pause  

*单行执行脚本样例

@echo off  %chcp 65001%  %-----必要参数(需要填的!)-----% %项目目录% set PROJECT_DIR=D:workspacemee-web %工具7z安装目录% set ZIP_EXEC_PATH="C:Program Files7-Zip7z" %压缩文件包名称% set FILE_NAME=mee-web.zip  %服务器IP% set SSH_IP=192.168.10.1 %服务器端口% set SSH_PORT=22 %服务器登录用户% set SSH_USER=root %服务器登录密码% set SSH_PASSWORD=root@1233 %服务器工作目录% set SSH_DIR=/home/nginx/tmp %其他变量(不用动),输出当前路径%  set BAT_PATH=%cd%  %-----打包-----% call cd %PROJECT_DIR%  if exist dist rd/s/q dist if exist %FILE_NAME% del /a/f/q %FILE_NAME%  call npm run build:uat --scripts-prepend-node-path=auto call %ZIP_EXEC_PATH%  a %FILE_NAME% ./dist/** call dir  %-----构建-----% call echo upload file to server... call cd %BAT_PATH% call %BAT_PATH%binpscp  -P %SSH_PORT% -pw %SSH_PASSWORD% %PROJECT_DIR%%FILE_NAME% %SSH_USER%@%SSH_IP%:%SSH_DIR% call echo invoke server command... call %BAT_PATH%binplink -pw %SSH_PASSWORD% -P %SSH_PORT%  %SSH_USER%@%SSH_IP% "cd %SSH_DIR% && unzip -o %FILE_NAME% && rm -rf %FILE_NAME%"  %auther by shadow% call echo success!  pause  

以上所有样例及用到的命令行工具均在此https://github.com/funnyzpc/autoDeploy有提供(7z除外)🎈

发表评论

评论已关闭。

相关文章