[CMD-BAT语法实战]一个包含删除,复制,查找,ifelse,字符串,启动其他cmd线程的完整示例

144 阅读5分钟

[CMD-BAT语法实战]一个包含删除,复制,查找,ifelse,字符串,启动其他cmd线程的完整示例

简介

%查看相对路径或是源目标
%~x查看文件名后缀
%~n查看文件名不含后缀
%~z查看大小
%~s查看绝对简写路径
%~f查看绝对路径
%~d查看盘符
%~t查看修改时间
if [not] defined variable 可以判断变量是否有内容
%~I 删除外围"引号
%~fI 完整路径
%~dI 驱动器号
%~pI 路径
%~nI 文件名
%~xI 文件扩展名
%~dpI: 驱动器号和路径
%~nxI: 文件名加扩展名

  • 命令文件连接符
    *, ? 文件通配符
    “” 字符串界定符
    ^ 转义符,其后面的特殊字符按原样输出
    | 命令管道符

文件重定向符
@ 命令行回显屏蔽符
/ 参数开关引导符
: 批处理标签引导符
% 批处理变量引导符
组合命令: &

用法: 第一条命令 & 第二条命令 [& 第三条命令…]
同时执行多条命令,而不管命令是否执行成功。

&&

用法: 第一条命令 && 第二条命令 [&& 第三条命令…]
同时执行多条命令,当碰到执行出错的命令将不执行后面的命令,如果一直没有出错则一直执行完所以命令。

||

用法: 第一条命令 || 第二条命令 [|| 第三条命令…]
同时执行多条命令,当碰到执行正确的命令将不执行后面的命令,如果一直没有出现正确执行的命令则一直执行完所以命令。

| 管道命令

用法: 第一条命令 | 第二条命令 [| 第三条命令…]
将第一条命令的结果作为第二条命令的参数来使用

, >>, 输出重定向命令

将一条命令或某个程序输出结果重定向到特定文件中。> 与 >> 的区别在于:
> 会清除原有文件中的内容后写入指定文件,
>> 只会追加内容到指定文件中,而不会改变其中的内容。

<, >&, <&

< 从文件中而不是键盘中读入命令输入。
>& 将一个句柄的输出写入到另一个句柄的输入中。
<& 从一个句柄读入输入并将其写入到另一个句柄输出中。

set [[/a [expression]] [/p [variable=]] string]
%CD% 目录(current directory)
%DATE% 日期
%TIME% 时间
%RANDOM% 随机数
(,) 分组
+,-,*,/,% 算法
<<, >> 逻辑移位
&, |, ^ 位运算
————————————————
版权声明:本文为CSDN博主「Asciphx」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:blog.csdn.net/qq_33359662…
做一个带输入框的cmd .bat程序
在这里插入图片描述

常用语法简介

1.中文不乱码:utf8

chcp 65001

2.获取目录:

%cd%

3.输出打印日志:

echo

4.检测用户输入:

set /p MaxClientCount=Please Write MaxClientCount(1~9999) And Enter:
echo You Write MaxClientCount: %MaxClientCount%

5.字符串判断包含:

echo %%i| findstr %SourceFileFullName% >nul && (
	echo continue %SourceFileFullName%
) || (
	del %%i
)

6.删除:

del *.*

7.循环:

:copyif
set /a ClientCount+=1
if %ClientCount% leq %MaxClientIndex% (
	copy %SourceFilePath% %TargetFilePath%\%SourceFileName%%ClientCount%%FileTypeName%
	goto copyif
)

8.if判断:

if %CleanOldApp%==1 (
	echo ------------------------------
	echo 2.0 CleanOldApp - 可跳过 
	echo ------------------------------

	@echo start clean oldapp
	for /r %%i in (*.exe) do (
		echo %%i| findstr %SourceFileFullName% >nul && (
			echo continue %SourceFileFullName%
		) || (
			del %%i
		)
	)
	@echo clean success
)

9.启动新cmd:

start cmd /k *.exe

完整示例

1.批量启动复制exe

@echo off
:: 设置中文不乱码 utf8
chcp 65001

echo ------------------------------
echo Project:Launch
echo Author:Dong
echo LastTime:20221122
echo ------------------------------

echo ------------------------------
echo 1.1 MaxClientCount(1~9999) 设置最大客户端数量
echo ------------------------------
set /p MaxClientCount=Please Write MaxClientCount(1~9999) And Enter:
echo You Write MaxClientCount: %MaxClientCount%

echo ------------------------------
echo 1.2 ClientStartIndex(1~9999) 设置客户端启动Index
echo ------------------------------
set /p ClientStartIndex=Please Write ClientStartIndex(1~9999) And Enter:
echo You Write ClientStartIndex: %ClientStartIndex%

echo ------------------------------
echo 1.3 CleanOldApp(1清理2不清理) 设置是否需要清理旧的exe
echo ------------------------------
set /p CleanOldApp=Please Write CleanOldApp(1/2) And Enter:
echo You Write CleanOldApp: %CleanOldApp%

echo ------------------------------
echo 1.4 InitVariable 初始化变量
echo ------------------------------
::初始变量
set TargetFilePath=%cd%
set SourceFileName=test
set FileTypeName=.exe
set SourceFileFullName=%SourceFileName%%FileTypeName%
set SourceFilePath=%TargetFilePath%\%SourceFileFullName%

::客户端开始Index
::set ClientStartIndex=100
::客户端数量
set ClientCount=%ClientStartIndex%
::最大客户端数量
::set MaxClientCount=3
::设置最大客户端Index
set /a MaxClientIndex+=%ClientStartIndex%
set /a MaxClientIndex+=%MaxClientCount%
::是否清理旧APP 1清理
::set CleanOldApp=1

::清理原先的exe程序
if %CleanOldApp%==1 (
	echo ------------------------------
	echo 2.0 CleanOldApp - 可跳过 
	echo ------------------------------

	@echo start clean oldapp
	for /r %%i in (*.exe) do (
		echo %%i| findstr %SourceFileFullName% >nul && (
			echo continue %SourceFileFullName%
		) || (
			del %%i
		)
	)
	@echo clean success
)

echo ------------------------------
echo 2.1 CopyClient 复制客户端
echo ------------------------------
::批量复制客户端
@echo start copy
:copyif
set /a ClientCount+=1
if %ClientCount% leq %MaxClientIndex% (
	copy %SourceFilePath% %TargetFilePath%\%SourceFileName%%ClientCount%%FileTypeName%
	goto copyif
)
@echo copy success

echo ------------------------------
echo 2.2 RunClient 启动客户端
echo ------------------------------
::批量启动客户端
@echo start run
:runif
set /a clientstartindex+=1
if %clientstartindex% leq %maxclientindex% (
	start cmd /k %targetfilepath%\%sourcefilename%%clientstartindex%%filetypename%
	goto runif
)
@echo run success

echo ------------------------------
echo 3.0 RunSuccess 启动完成...
echo ------------------------------
pause

2.压缩解压缩exe

@echo off
:: 设置中文不乱码 utf8
chcp 65001

@echo ------------------------------
@echo Project:Zip
@echo Author:Dong
@echo LastTime:20221122
@echo ------------------------------

@set /p ZipPathName=Please Write ZipPathName(test):
@echo You Write ZipPathName %ZipPathName%

@echo ------------------------------
@echo 1.0 init variant
@echo ------------------------------
set "ZipFileName=%ZipPathName%"
set "ZipFileFullName=%ZipFileName%.zip"
set "ZipFileFullPath=%cd%\%ZipFileFullName%"
set ZipTemp=temp

@echo ------------------------------
@echo 1.1 clean temp
@echo ------------------------------
@echo %ZipFileFullPath%
if exist "%ZipFileFullPath%" (
	del %ZipFileFullPath%
    echo delete success %ZipFileFullPath%
) else (
	echo not found %ZipFileFullPath%
)

set "TempPath=%cd%\%ZipPathName%%ZipTemp%"
@echo %TempPath%
if exist %TempPath% ( 
	del %TempPath%
    echo delete success %TempPath%
) else (
    echo not found %TempPath%
)

@echo ------------------------------
@echo 2.0 zip
@echo ------------------------------
zip.exe -r %ZipFileFullPath% %ZipPathName%

@echo ------------------------------
@echo 2.1 unzip
@echo ------------------------------
unzip.exe -d %TempPath% %ZipFileFullName%

@echo ------------------------------
@echo 3.0 zip/unzip success
@echo ------------------------------
pause

github地址

github-bat-cmd-demo