2011-06-08 115 views
6

我有这样的情况。我有一个文件中的网址列表。Windows批处理脚本:子串计算

SET str1="http://www.domain.com/dir1/dir2/dir3/dir4/dir5/file1.txt"

在上述字符串http://www.domain.com/dir1/dir2/dir3是在所有的URL恒定。 我需要提取每个网址中的其余路径。

我的意思是,我需要得到从上面的网址,最后一个字符串为/dir4/dir5/file1.txt

感谢

回答

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

+0

事实上,你应该说 “VAR%:〜开始,长度%符号” – hoang 2011-11-22 10:22:20

+2

@hoang:显然'-1'不是长度。如果使用正数,则它是一个长度,但OP不希望指定长度(因为子字符串是可变长度)。使用负数指定一个结束位置,这就是所谓的这里,因为OP希望子字符串在结束引号之前结束。 – Gabe 2011-11-22 13:46:23

+0

你说的没错,我错过了一个负数是从头到尾的观点。 – hoang 2011-11-23 17:00:42

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