gpt4 book ai didi

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

转载 作者:我是一只小鸟 更新时间:2023-07-21 22:31:10 28 4
gpt4 key购买 nike

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 这类开头的判断命令则不存在多条命令连续执行换行停止问题. 。

对于像 echo 、 dir 、 zip 、 mvn 、 java 等等这类命令,建议命令前加一个 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 可用字节


                        
                      

尤其是命令放在 cmd 或 bat 文件内时一定要使用 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 除外)🎈 。

最后此篇关于windowsCMD命令的一些使用方法及注意事项的文章就讲到这里了,如果你想了解更多关于windowsCMD命令的一些使用方法及注意事项的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com