2010-04-22 22 views
7

Tengo lo siguiente en mi archivo bat. decirsubcadena usando el comando bat

trayectoria del sistema = c: \ temp \ test

así que básicamente quiero tener una salida que me daría el resultado como c: \ temp \

No encontré ninguna indexOf equivalente en el bate mando.

Gracias.

Respuesta

5

Antecedentes:

>set fullname=c:\mypath\oldfile 
>set changedname=%fullname:oldfile=newfile% 
>echo %changedname% 
c:\mypath\newfile 

aplicado a un problema:

> set fullname=c:\mypath\oldfile 
> set pathonly=%fullname:oldfile=% 
> echo %pathonly% 
c:\mypath\ 
1

Una pregunta que realmente me hace desear 4DOS todavía existía. Sin embargo, encontré algo que podría ayudar en alt.msdos.batch.nt. La página del manual para set parece contener la mayoría de la misma información. (Comando help set)

set test=123456789 

rem extract chars 0-5 from the variable test 
set test=%test:~0,5% 

echo %test% 

(Nota: probado en Windows XP SP3)

0

subseries Naïve tienen el problema de que hay que ajustarlos cada vez que cambien sus caminos y no es una solución genérica a la problema.

El siguiente archivo por lotes da una prueba de concepto cómo se puede hacer la parte de truncamiento de la trayectoria:

@echo off 
set foo=C:\Temp\Test 
call :strip 
echo %foo% 
goto :eof 

:strip 
if not "%foo:~-1%"=="\" (
    set foo=%foo:~0,-1% 
    goto :strip 
) 
goto :eof 

es difícil codificado a una sola variable, sino que se fija fácilmente si es necesario.

La parte central aquí es la subrutina strip que realiza un bucle y corta el último carácter de la cadena hasta que se encuentra una barra invertida. Esto elimina efectivamente la última parte de la ruta.

1

¿Por qué quieres eso?

Johannes' respuesta es una solución posible, pero tal vez el camino que se refiere a que se está (o puede ser) pasa como argumento a la escritura, en cuyo caso se puede utilizar la siguiente sintaxis:

REM Extracts the drive and path from argument %1 
SET p=%~dp1 

Alternativamente, usted puede combinar .. y la ruta del script (%0):

REM Sets p to a sibling of the script directory 
SET p=%~dp0..\test 
Cuestiones relacionadas