bat字符串截取

举例:输入hello world和-2,输出ld

这个简单。代码如下

@ echo off&Setlocal enabledelayedexpansion
:标签1
set 文本=hello world
set 开头=-2
set 结尾=
set /p 文本=请输入文本,留空使用默认值hello world    
set /p 开头=请输入取值开头位数,正数为从前往后数,负数为从后往前数。留空使用默认值-2    
set /p 结尾=请输入取值结尾位数,正数为从取值开头往后数,负数为从文本结尾往前数。留空则从文本结尾结束。    
if not "%结尾%"="" set 结尾=,%结尾%
set 文本=!文本:~%开头%%结尾%!
echo 处理结果:%文本%
goto 标签1

转载请注明出处
1.变量的范围
数字计算[±21 4748 3647 整数],文本[8191个字节](set /p a=<文件 和 ^换行符 可突破该限制,暂不解释)
2.变量的命名
不允许使用纯数字
不建议使用单字母变量
命名不区分大小写
可以使用中文作为变量名
3.变量扩展-文本(以下示例均以变量%a%示范,实际变量名可以为任何值)
文本替换
%a:文本1=文本2% 文本1替换为文本2(文本2可留空,如%a:文本1=%)
文本替换支持通配符*?等
%a:*文本1=文本2% 开头到文本1第一次出现的地方替换为文本2(文本2可留空)
文本截取部分
%a:~10% 第10个字之后的内容
%a:~-10% 倒数第10个字之后的内容
%a:~,5% 开头5个字
%a:~,-5% 开头 - 倒数第5个字
%a:~10,5% 第10个字之后的5个字
%a:~10,-5% 第10个字 - 倒数第5个字
%a:~-10,5% 倒数第10个字之后的5个字
%a:~-10,-5% 倒数第10个字 - 倒数第5个字
注:文本扩展在for命令中可能不可用
示范:set a=%a:~-10,-5%
3.变量扩展-路径(以下示例均以变量%a示范)
(此时右边%可以省略, %~a 和 %~a% 是一样的)
%a 路径 "Temp\tmp 12345.txt"
%~a 删除引号 Temp\tmp 12345.txt
%~fa 完整路径 D:\AppData\Local\Temp\tmp 12345.txt
%~da 分区 D:
%~pa 路径 \AppData\Local\Temp\
%~na 文件名 tmp 12345
%~xa 扩展名 .txt
%~sa 短文件名 D:\AppData\Local\Temp\TM3A8C~1.TXT
%~aa 文件属性 --a--------
%~ta 修改日期 2016/06/02 16:26
%~za 文件大小(字节) 18
%~$b:a 在 目录b 搜索 文件a 找到的第一个文件。
如果变量b不存在,或者没有找到文件a,返回空字符串。
需事先给变量b赋值,多个路径可用分号分隔。命令示例
set b=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
可以组合使用来得到多重结果
%~dpa 分区和路径 D:\AppData\Local\Temp\
%~nxa 完整文件名 tmp 12345.txt
%~dp$b:a 在 目录b 搜索 文件a 输出 文件a 的 分区和路径
%~ftzaa 类似dir命令的输出(完整路径 日期 大小 属性)
--a-------- 2016/06/02 16:26 18 D:\AppData\Local\Temp\tmp 12345.txt
不组合拆分开也行,比如这样%~fa %~ta %~za %~aa
注意:路径扩展仅适用于%0 %1 …%9和for中的单字母变量%%i,若要支持其他变量,考虑使用call

示范

@ echo  off & set a=百度贴吧。百度公司。中国公司
echo %%0 %0
echo 文本
echo %%a%% %a%
echo %%a:。=-%% %a:。=-%
echo %%a:百度=%% %a:百度=%
echo %%a:*公司=123%% %a:*公司=123%
echo %%a:~5%% %a:~5%
echo %%a:~-5%% %a:~-5%
echo %%a:~,3%% %a:~,3%
echo %%a:~,-3%% %a:~,-3%
echo %%a:~5,3%% %a:~5,3%
echo %%a:~5,-3%% %a:~5,-3%
echo %%a:~-5,3%% %a:~-5,3%
echo %%a:~-5,-3%% %a:~-5,-3%
pause & echo 产生一个临时文件>"tmp 12345.txt"
rem 使用上方办法即可创建带空格的文件
Call :sub "tmp 12345.txt"
rem 以上一条命令表示跳转到sub标签并将变量%1设置为"tmp 12345.txt"
pause & Del "tmp 12345.txt" & goto tu
:sub
echo 路径
echo %%1 %1
echo %%~1 %~1
echo %%~f1 %~f1
echo %%~d1 %~d1
echo %%~p1 %~p1
echo %%~n1 %~n1
echo %%~x1 %~x1
echo %%~s1 %~s1
echo %%~a1 %~a1
echo %%~t1 %~t1
echo %%~z1 %~z1
echo %%~dp1 %~dp1
echo %%~nx1 %~nx1
echo %%~ftza1 %~ftza1
echo. & Goto :eof
:tu
echo 特殊变量
echo 当前目录%%CD%% %CD%
echo 当前日期%%DATE%% %DATE%
echo 当前时间%%TIME%% %TIME%
echo 范围在0-32767的伪随机数%%RANDOM%% %RANDOM%
echo 错误返回码%%ERRORLEVEL%% %ERRORLEVEL%
echo cmd的版本号%%CMDEXTVERSION%% %CMDEXTVERSION%
echo 显示当前打开cmd所用的命令%%CMDCMDLINE%% %CMDCMDLINE%
echo 当前最高NUMA节点号%%HIGHESTNUMANODENUMBER%% %HIGHESTNUMANODENUMBER%
pause

 

https://www.zhihu.com/question/356855628/answer/1000353295

 

Guess you like

Origin blog.csdn.net/tjcwt2011/article/details/120506627