批处理文件中的字符串符号操作

时间:2008-10-07 22:52:04

标签: build-automation batch-file automated-tests dos

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

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

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

7 个答案:

答案 0 :(得分: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"

答案 1 :(得分:3)

.cmd文件中的常规子字符串语法(以及Win95上的.bat文件)是:

%variable:~num_chars_to_skip,num_chars_to_keep%

此页面提供了更多选项:VarSubstring

答案 2 :(得分:2)

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

  

设置/?

对于字符串解析(例如,在字符串中查找'。')尝试

  

for /?

答案 3 :(得分: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来测试。

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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

对于这个例子,%~n1将解析为没有扩展名的名称。

答案 6 :(得分:0)

您还可以查看调用文档(call /?)以获取基于文件和目录的特定子字符串信息。