2010-04-22 27 views
7

我的bat文件中有以下內容。說使用bat命令的子串

設置路徑= C:\ TEMP \測試

所以基本上我想有一個輸出,這將使我結果爲C:\ TEMP \

我沒有找到蝙蝠任何的indexOf相當於命令。

謝謝。

回答

5

背景:

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

適用於問題:

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

真的讓我希望4DOS仍然存在的問題。不過,我在alt.msdos.batch.nt中發現了一些可能的幫助。 set的手冊頁似乎包含大部分相同的信息。 (命令help set

set test=123456789 

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

echo %test% 

(注:在Windows XP SP3測試)

0

樸素子有,你有你的每一個改變路徑的時間來調整他們的問題,它不是一個通用的解決問題。

下面的批處理文件給出的概念可能會怎麼做路徑的截斷部分的證明:

@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 

它是硬編碼到一個變量,但如果需要的話,很容易固定。

這裏的核心部分是strip子例程,它循環並切斷字符串的最後一個字符,直到找到反斜槓。這有效地消除了路徑的最後部分。

1

你爲什麼要這樣做?

Johannes'答案是一個可能的解決方案,但也許你是指被(或可以)作爲參數傳遞給腳本,在這種情況下,你可以使用下面的語法的路徑:

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

另外,您可以結合..和腳本路徑(%0):

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