2010-04-22 3 views
7

Ho la seguente cosa nel mio file bat. diresottostringa usando il comando bat

set path = c: \ temp \ test

in modo sostanzialmente voglio avere un'uscita che mi avrebbe dato il risultato come c: \ temp \

non ho trovato alcun indexOf equivalente a pipistrello comando.

Grazie.

risposta

5

Background:

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

Applicato a problema:

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

Una domanda che mi fa davvero piacere 4DOS ancora esisteva. Tuttavia, ho trovato qualcosa che potrebbe aiutare in alt.msdos.batch.nt. La pagina di manuale per set sembra contenere la maggior parte delle stesse informazioni. (Comando help set)

set test=123456789 

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

echo %test% 

(Nota: testato su Windows XP SP3)

0

sottostringhe Naïve avere il problema che si deve regolare ogni volta i percorsi cambiano e non è una soluzione generica al problema.

il seguente file batch dà una prova di concetto come si potrebbe fare la parte troncamento del percorso:

@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 

E 'hard-coded a una singola variabile, ma che è facilmente risolto se necessario.

La parte principale qui è la subroutine strip che esegue il ciclo e interrompe l'ultimo carattere della stringa finché non viene trovato un backslash. Ciò rimuove efficacemente l'ultima parte del percorso.

1

Perché lo vuoi?

Johannes' risposta è una possibile soluzione, ma forse il percorso che si riferiscono a che viene (o potrebbero essere) passato come argomento allo script, nel qual caso è possibile utilizzare la seguente sintassi:

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

In alternativa è possibile combinare .. e il percorso dello script (%0):

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