2011-06-08 14 views
6

Tengo una situación como esta. Tengo una lista de urls en un archivo.Windows script por lotes: cálculo de subcadena

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

En la cadena de http://www.domain.com/dir1/dir2/dir3 anterior es constante en todas las direcciones URL. Necesito extraer el resto de la ruta en cada url.

quiero decir, que necesito para obtener la cadena final de la URL anterior es /dir4/dir5/file1.txt

Gracias

Respuesta

9

Es necesario la notación %var:~start,end%. Por ejemplo, si ejecuta esto:

@SET str1="http://www.domain.com/dir1/dir2/dir3/dir4/dir5/file1.txt" 
@ECHO %str1:~37,-1% 

Se imprimirá /dir4/dir5/file1.txt.

+0

De hecho, usted debe decir "% var: ~ inicio, duración% notación" – hoang

+2

@hoang: 'Claramente no es un -1' longitud. Si usa un número positivo, es una longitud, pero el OP no desea especificar una longitud (porque la subcadena es de longitud variable). Usar un número negativo especifica una posición final, que es lo que se necesita aquí porque el OP quiere que la subcadena termine justo antes de la cita final. – Gabe

+0

Tiene toda la razón, me olvidé de señalar que un número negativo es una posición desde el final. – hoang

5

O bien, puede usar la sintaxis %variable:str_to_delete=% para eliminar una cadena de caracteres de la variable. De esta forma, no tienes que depender de las posiciones de los personajes dentro de la cadena.

código

Ejemplo:

@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% 

Salida:

/dir4/dir5/file1.txt 
Cuestiones relacionadas