2

有没有办法使用 .bat/.cmd 文件获取字符串的子字符串?

例如,给定字符串“hello.txt”,有没有办法去除 .txt?

编辑:还有一种更通用的方法可以做到这一点,而不是假设它是文件名或文件路径?

4

7 回答 7

8

如果这是作为参数传递的文件,则可以使用 %~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"
于 2008-10-07T22:59:38.167 回答
3

.cmd 文件(和 Win95 后的 .bat 文件)中的一般子字符串语法是:

%变量:~num_chars_to_skip,num_chars_to_keep%

此页面提供更多选项:VarSubstring

于 2008-10-07T23:09:00.143 回答
2

对于子字符串和其他有趣的“变量替换”方法,您可以获得以下帮助:

放 /?

对于字符串解析(例如在字符串中查找“.”)尝试

为了 /?

于 2008-10-08T07:20:48.107 回答
1

尝试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 来测试。

于 2008-10-07T23:11:04.650 回答
1

最好的方法就是安装python(或perl)相信我,我已经尝试了几乎所有的东西,而且在'DOS'(或实际上其他任何东西)中进行文本操作只是令人头疼。

于 2008-10-08T13:03:46.293 回答
0

对于任意字符串,我不这么认为。

对于这个非常示例,%~n1将解析为不带扩展名的名称。

于 2008-10-07T22:59:48.133 回答
0

You can also look at the documentation for call (call /?) for getting file and directory-based specific substring info as well.

于 2008-10-23T21:09:25.513 回答