2010-04-22 9 views
7

Ich habe die folgende Sache in meiner Fledermaus-Datei. sagenTeilstring mit Fledermaus Befehl

set path = c: \ temp \ test

so dass im Grunde möchte ich eine Ausgabe haben, die mir das Ergebnis als c geben würde: \ temp \

i jede IndexOf Äquivalent in Fledermaus finden didnt Befehl.

Danke.

Antwort

5

Hintergrund:

Problem Beworben:

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

Eine Frage, die mich wirklich wünschen lässt 4DOS existiert noch. Ich habe jedoch etwas gefunden, das in alt.msdos.batch.nt helfen könnte. Die Handbuchseite für set scheint die meisten der gleichen Informationen zu enthalten. (Befehl help set)

set test=123456789 

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

echo %test% 

(Hinweis: auf Windows XP SP3 getestet)

0

Naïve Teil haben das Problem, das Sie haben sie jedes Mal die Pfade ändern anzupassen und es ist nicht eine generische Lösung für die Problem.

Die folgende Batchdatei gibt ein Proof of Concept, wie Sie vielleicht das Abschneiden Teil des Weges tun:

@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 auf eine einzige Variable hartcodiert ist, aber das ist leicht bei Bedarf festgelegt.

Das Kernstück hier ist die strip Subroutine, die das letzte Zeichen der Zeichenkette wiederholt und abschneidet, bis ein Backslash gefunden wird. Dies entfernt effektiv den letzten Teil des Pfades.

1

Warum willst du das?

Johannes' Antwort ist eine mögliche Lösung, aber vielleicht der Weg verweisen Sie (oder könnte) als Argument an das Skript übergeben wird, in dem Fall, dass Sie die folgende Syntax verwenden:

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

Alternativ dazu können Sie .. und den Pfad des Skripts kombinieren (%0):

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