Windows批处理脚本:子字符串计算

6
我有一个这样的情况。我在文件中有一系列的URL。 SET str1="http://www.domain.com/dir1/dir2/dir3/dir4/dir5/file1.txt" 在上述字符串中,http://www.domain.com/dir1/dir2/dir3 在所有的 URL 中都是固定不变的。我需要提取每个 URL 中其余的路径。
也就是说,我需要从上面的URL中获取最终的字符串 /dir4/dir5/file1.txt 谢谢。
2个回答

9
你需要使用 %var:~start,end% 的表示方式。例如,如果你运行以下命令:
@SET str1="http://www.domain.com/dir1/dir2/dir3/dir4/dir5/file1.txt"
@ECHO %str1:~37,-1%

它将打印/dir4/dir5/file1.txt


实际上,你应该说“%var:~start,length% 表示法”。 - hoang
3
很明显,-1 不是一个长度。如果您使用正数,则是一个长度,但 OP 不想指定长度(因为子字符串长度可变)。使用负数指定一个结束位置,在这里是正确的,因为 OP 希望子字符串在结束引号之前结束。 - Gabe
你说得完全正确,我忽略了负数是从末尾开始计算的这一点。 - hoang

5

或者,您可以使用%variable:str_to_delete=%语法从变量中删除一个字符字符串。这样,您就不必依赖于字符串内的字符位置。

示例代码:

@echo off
set str1="http://www.domain.com/dir1/dir2/dir3/dir4/dir5/file1.txt"

:: remove the common part of the path
set str2=%str1:http://www.domain.com/dir1/dir2/dir3=%
:: remove the quotes
set str2=%str2:"=%

echo.%str2%

输出:

/dir4/dir5/file1.txt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接