- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
转载请著名出处: 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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我想了解 Ruby 方法 methods() 是如何工作的。 我尝试使用“ruby 方法”在 Google 上搜索,但这不是我需要的。 我也看过 ruby-doc.org,但我没有找到这种方法。
Test 方法 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 object.Test(string) 参数 object 必选项。总是一个
Replace 方法 替换在正则表达式查找中找到的文本。 object.Replace(string1, string2) 参数 object 必选项。总是一个 RegExp 对象的名称。
Raise 方法 生成运行时错误 object.Raise(number, source, description, helpfile, helpcontext) 参数 object 应为
Execute 方法 对指定的字符串执行正则表达式搜索。 object.Execute(string) 参数 object 必选项。总是一个 RegExp 对象的名称。 string
Clear 方法 清除 Err 对象的所有属性设置。 object.Clear object 应为 Err 对象的名称。 说明 在错误处理后,使用 Clear 显式地清除 Err 对象。此
CopyFile 方法 将一个或多个文件从某位置复制到另一位置。 object.CopyFile source, destination[, overwrite] 参数 object 必选
Copy 方法 将指定的文件或文件夹从某位置复制到另一位置。 object.Copy destination[, overwrite] 参数 object 必选项。应为 File 或 F
Close 方法 关闭打开的 TextStream 文件。 object.Close object 应为 TextStream 对象的名称。 说明 下面例子举例说明如何使用 Close 方
BuildPath 方法 向现有路径后添加名称。 object.BuildPath(path, name) 参数 object 必选项。应为 FileSystemObject 对象的名称
GetFolder 方法 返回与指定的路径中某文件夹相应的 Folder 对象。 object.GetFolder(folderspec) 参数 object 必选项。应为 FileSy
GetFileName 方法 返回指定路径(不是指定驱动器路径部分)的最后一个文件或文件夹。 object.GetFileName(pathspec) 参数 object 必选项。应为
GetFile 方法 返回与指定路径中某文件相应的 File 对象。 object.GetFile(filespec) 参数 object 必选项。应为 FileSystemObject
GetExtensionName 方法 返回字符串,该字符串包含路径最后一个组成部分的扩展名。 object.GetExtensionName(path) 参数 object 必选项。应
GetDriveName 方法 返回包含指定路径中驱动器名的字符串。 object.GetDriveName(path) 参数 object 必选项。应为 FileSystemObjec
GetDrive 方法 返回与指定的路径中驱动器相对应的 Drive 对象。 object.GetDrive drivespec 参数 object 必选项。应为 FileSystemO
GetBaseName 方法 返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。 object.GetBaseName(path) 参数 object 必
GetAbsolutePathName 方法 从提供的指定路径中返回完整且含义明确的路径。 object.GetAbsolutePathName(pathspec) 参数 object
FolderExists 方法 如果指定的文件夹存在,则返回 True;否则返回 False。 object.FolderExists(folderspec) 参数 object 必选项
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
我是一名优秀的程序员,十分优秀!