有没有办法使用 .bat/.cmd 文件获取字符串的子字符串?
例如,给定字符串“hello.txt”,有没有办法去除 .txt?
编辑:还有一种更通用的方法可以做到这一点,而不是假设它是文件名或文件路径?
有没有办法使用 .bat/.cmd 文件获取字符串的子字符串?
例如,给定字符串“hello.txt”,有没有办法去除 .txt?
编辑:还有一种更通用的方法可以做到这一点,而不是假设它是文件名或文件路径?
如果这是作为参数传递的文件,则可以使用 %~n1,如下所示:
test.bat
----------
echo %~n1 %~n2
c:\> test.bat myfile.txt my.long.file.bat
myfile my.long.file
如果您知道字符串的长度,则可以使用子字符串运算符:
echo %variable:0,4% => "test.txt" => "test"
并获得除最后 4 个字符之外的所有内容:
echo %variable:~0,-4% => "file...name.txt" => "file...name"
.cmd 文件(和 Win95 后的 .bat 文件)中的一般子字符串语法是:
%变量:~num_chars_to_skip,num_chars_to_keep%
此页面提供更多选项:VarSubstring
对于子字符串和其他有趣的“变量替换”方法,您可以获得以下帮助:
放 /?
对于字符串解析(例如在字符串中查找“.”)尝试
为了 /?
尝试help set
一些可用于 cmd.exe 的字符串处理。set 的帮助包括您可以正常执行的操作,在“set”命令之外
你可以做类似的事情
set source=hello.txt
REM print hello
echo %source:~0,-4%
REM print o.t
echo %source:~4,3%
REM print help.txt
echo %source:lo=p%
REM etc
echo %source:llo=%
上面的“代码”可能有问题。我是从内存中写出来的,我附近没有可用的 cmd.exe 来测试。
最好的方法就是安装python(或perl)相信我,我已经尝试了几乎所有的东西,而且在'DOS'(或实际上其他任何东西)中进行文本操作只是令人头疼。
对于任意字符串,我不这么认为。
对于这个非常示例,%~n1
将解析为不带扩展名的名称。
You can also look at the documentation for call (call /?) for getting file and directory-based specific substring info as well.