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

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

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

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

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

在cmd窗口定义并执行:

E:\self\mee_full\blogs\bin\tmp>set 234=hello
E:\self\mee_full\blogs\bin\tmp>call echo %234%
hello

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

  • 定义exec.cmd文件内容
set 234=hello
call echo %234%
  • 执行exec.cmd
E:\self\mee_full\blogs\bin\tmp>exec.cmd
E:\self\mee_full\blogs\bin\tmp>set 234=hello
E:\self\mee_full\blogs\bin\tmp>call echo 34
34

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

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

  • 如下例:

E:\self\mee_full\blogs\bin\哈了\tmp>E:\self\mee_full\blogs\bin\tmp\zip -r ../qq.zip ./files
'E:\self\mee_full\blogs\bin\哈了' 不是内部或外部命令,也不是可运行的程序
或批处理文件。 E:\self\mee_full\blogs\bin\tmp>

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

E:\self\mee_full\blogs\bin\哈了\tmp>
E:\self\mee_full\blogs\bin\哈了\tmp>"E:\self\mee_full\blogs\bin\tmp\zip" -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:\self\mee_full\blogs\bin\tmp>
E:\self\mee_full\blogs\bin\tmp>call echo hello
hello E:\self\mee_full\blogs\bin\tmp>call dir
驱动器 E 中的卷是 DATA
卷的序列号是 DA15-004D E:\self\mee_full\blogs\bin\tmp 的目录 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:\self\mee_full\blogs\bin\tmp>exec.cmd aa bb cc
E:\self\mee_full\blogs\bin\tmp>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:\self\mee_full\blogs\bin\tmp>set aa=hello
E:\self\mee_full\blogs\bin\tmp>echo %aa%
hello

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

四.批量压缩文件问题

windows并未内置zip相关命令工具,不论是cmd还是powershell都没有,所以这就需要我们自行安装zip相关工具。

windows下可以实现zip相关功能的工具大概有这俩,这是我用到过的:

1.使用7z

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

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

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

2.使用bzip2

这是个命令行用的bzip2工具。

具体使用如下:

%----若 7z.exe 安装在这个地方 ---%
D:\zips\zip.exe %---- 执行的命令 ---%
D:\zips\zip -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:\self\mee_full\blogs\tmp\files>echo hello youth | findstr "y"
hello youth
  • || 操作符

    命令1 || 命令2

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

*单条批量执行脚本样例

@echo off

%chcp 65001%

%-----必要参数(需要填的!)-----%
%项目目录%
set PROJECT_DIR=D:\workspace\mee-web
%工具7z安装目录%
set ZIP_EXEC_PATH="C:\Program Files\7-Zip\7z"
%压缩文件包名称%
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%\bin\pscp -P %SSH_PORT% -pw %SSH_PASSWORD% %PROJECT_DIR%\%FILE_NAME% %SSH_USER%@%SSH_IP%:%SSH_DIR% ^
&& echo invoke server command... ^
&& %BAT_PATH%\bin\plink -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:\workspace\mee-web
%工具7z安装目录%
set ZIP_EXEC_PATH="C:\Program Files\7-Zip\7z"
%压缩文件包名称%
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%\bin\pscp -P %SSH_PORT% -pw %SSH_PASSWORD% %PROJECT_DIR%\%FILE_NAME% %SSH_USER%@%SSH_IP%:%SSH_DIR%
call echo invoke server command...
call %BAT_PATH%\bin\plink -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除外)

windows CMD命令的一些使用方法及注意事项的更多相关文章

  1. 如何清除DNS缓存,使用cmd命令清理DNS缓存方法

    如何清除DNS缓存,使用cmd命令清理DNS缓存方法 有时候电脑突然上不了网,或者存在某些网站打不开的情况,但别的网站又可以打开,解决办法需要清除DNS缓存,那么如何清除DNS缓存呢,最常用的方法就是 ...

  2. SQL server 存储过程 C#调用Windows CMD命令并返回输出结果 Mysql删除重复数据保留最小的id C# 取字符串中间文本 取字符串左边 取字符串右边 C# JSON格式数据高级用法

    create proc insertLog@Title nvarchar(50),@Contents nvarchar(max),@UserId int,@CreateTime datetimeasi ...

  3. C语言使用cmd命令并获取输出方法

    转自http://blog.csdn.net/hxh129/article/details/8000205 C语言使用cmd命令并获取输出方法 在实践中,我们有时候需要用C语言来调用cmd的命令,并得 ...

  4. Windows CMD命令大全(转)

    Windows CMD命令大全   命令简介 cmd是command的缩写.即命令行 . 虽然随着计算机产业的发展,Windows 操作系统的应用越来越广泛,DOS 面临着被淘汰的命运,但是因为它运行 ...

  5. 【转】Python实现修改Windows CMD命令行输出颜色(完全解析)

    用Python写命令行程序的时候,单一的输出颜色太单调.其实我们可以加些色彩,比如用红色表示警告,绿色表示结果正常等.网上也有几篇类似的帖子,但是没有把问题讲清楚,贴的代码也不是太清晰.这里,对Win ...

  6. Windows —— cmd命令

    Windows —— cmd命令 cd 命令 进入cmd的默认目录:默认为 C:\Users\Administrator> 进入文件夹:cd 文件夹名 返回上一层目录:cd.. 切换目录: 清屏 ...

  7. windows cmd命令显示UTF8设置

    windows cmd命令显示UTF8设置   在中文Windows系统中,如果一个文本文件是UTF-8编码的,那么在CMD.exe命令行窗口(所谓的DOS窗口)中不能正确显示文件中的内容.在默认情况 ...

  8. windows cmd 命令和 linux 命令

    windows cmd 命令和 linux 命令 常用的内部命令有md.cd.rd.dir.path.copy.type.edit.ren.del.cls.ver.date.time.prompt.常 ...

  9. Python实现Windows CMD命令行彩色输出

    #! /usr/bin/env python #coding=utf-8   import ctypes,sys   STD_INPUT_HANDLE = -10 STD_OUTPUT_HANDLE ...

  10. Windows cmd 命令行基本操作

    Windows cmd 命令行基本操作 1. 进入到指定根目录 注意:不区分大小写 例如进入到 D 盘 2. 进入到指定的目录 例如 (如果目录文件名太长,可以使用 tab 键来自动补全.重复按可以进 ...

随机推荐

  1. Cmder: 懒癌必备!从此告别记事本记命令的日子

    前言 平时开发中遇到这样那样的命令需要记下来,一般做法是这样. 新建记事本 将需要记下的关键命令保存. 每次需要使用时,粘贴复制即可. 好像没什么毛病!直到遇到了 Cmder... 当看到同事分析问题 ...

  2. 吃透Redis面试八股文

    Redis连环40问,绝对够全! Redis是什么? Redis(Remote Dictionary Server)是一个使用 C 语言编写的,高性能非关系型的键值对数据库.与传统数据库不同的是,Re ...

  3. 一文详解RocketMQ-Spring的源码解析与实战

    摘要:这篇文章主要介绍 Spring Boot 项目使用 rocketmq-spring SDK 实现消息收发的操作流程,同时笔者会从开发者的角度解读 SDK 的设计逻辑. 本文分享自华为云社区< ...

  4. mysql安装my.cnf配置

    进入my.cnf文件//乱码修改 设置编码 character_set_server = utf8mb4 //编码 collation-server = utf8mb4_general_ci //连接 ...

  5. Windows 11 启用 Hyper-V 之后网络上传速度异常慢解决方案

    最近在开发用的台式机上启用了 Windows 的 Hyper-V 虚拟化功能,利用虚拟机运行了一台 Windows Server 2022 和 一台 Ubuntu Server,为了方便别的机器直接访 ...

  6. 2023-05-06:X轴上有一些机器人和工厂。给你一个整数数组robot,其中robot[i]是第i个机器人的位置 再给你一个二维整数数组factory,其中 factory[j] = [posit

    2023-05-06:X轴上有一些机器人和工厂.给你一个整数数组robot,其中robot[i]是第i个机器人的位置 再给你一个二维整数数组factory,其中 factory[j] = [posit ...

  7. #Python 缺失值的检测与处理,处理部分

  8. 2022-07-23:给定N件物品,每个物品有重量(w[i])、有价值(v[i]), 只能最多选两件商品,重量不超过bag,返回价值最大能是多少? N <= 10^5, w[i] <= 10^5, v

    2022-07-23:给定N件物品,每个物品有重量(w[i]).有价值(v[i]), 只能最多选两件商品,重量不超过bag,返回价值最大能是多少? N <= 10^5, w[i] <= 1 ...

  9. 2022-03-05:不相交的线。 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直

    2022-03-05:不相交的线. 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数. 现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直 ...

  10. Linux(redhat)镜像

    作为一个合格的程序猿,Linux那就是必须得会玩哟呵,搜集了一些镜像分享大家,望笑纳. 云盘地址https://pan.baidu.com/s/1cB-llYI5RdRm9xJDmjFoWg 提取码 ...