2011-10-04 19 views
0

我一直在構建一個打包工具,它基本上可以在兩個SVN修訂版之間獲得所有添加/修改的文件,然後將它們複製到本地並將它們壓縮。至此,我擁有能夠成功提取兩個修訂版之間的所有更改的文件。如何從批處理腳本中的字符串中提取文件夾路徑

爲了更進一步,我使用xcopy以遞歸方式在特定目錄創建文件夾。

假設當我用svn diff命令檢查兩個版本

/temp1/temp2/temp3/temfile.txt 
/temp1/temp21/temp31/tempfile.txt 
/temp1/temp2/ (folder created) 
/temp1/temp2/temp3 (folder created) 

有關的XCopy工作,我做了以下文件改變

xcopy local/svn/copy/path d:/{folderpath} 

其中FOLDERPATH需要從所提取的以上更改列表例如

xcopy "C:/LocalSVN/temp1/temp2/temp3/temfile.txt" "d:/temp1/temp2/temp3/" 

我需要在我的批處理文件,只提取文件夾路徑和刪除文件name.What是做一個批處理文件的最好方法?

有沒有不同的方法來實現我想要做的?

+0

你應該閱讀後你之前的5時間:【如何獲得在批處理文件的目錄路徑的一部分(http://stackoverflow.com/q/7527529/463115) – jeb

+0

恐怕,這並不能解決我的問題!該解決方案適用於目錄並涉及bat文件所在的路徑。如果仔細閱讀我的問題,它必須處理包含目錄路徑的字符串。 – Rupin

+0

也許你可以在這裏找到我的答案[類似的帖子] [1]。 [1]:http://stackoverflow.com/questions/7527529/how-to-get-a-part-of-the-directory-path-in-a-batch-file/7532349# 7532349 – Arun

回答

2

這幾乎是一樣How to get a Part of the Directory path in a batch file

的關鍵是使用%〜DP功能,並且因爲這只是用參數(不變量)的作品,你可以使用一個for循環或子程序移動你的變量變成一個參數。

@echo off 
set "testString=/temp1/temp2/temp3/temfile.txt" 

call :GetPath returnVal "%testString%" 
echo %returnVal% 
exit /b 

:GetPath 
set "%1=%~dp2" 
exit /b 
+0

這不會工作。輸出是C:\ temp1 \ temp2 \ temp3 \ temfile.txt,作爲我正在尋找的輸出只是\ temp1 \ temp2 \ temp3,沒有驅動器號.. – Rupin

+0

正如在'for /?'中解釋的那樣,d =驅動器p =路徑,所以你可以在你的情況下使用'set'%1 =%〜p2'' – jeb

+0

如果調用在FOR循環。我該如何解決這種情況? –

0
@echo off 
setlocal 
SET SUBDIR=%~dp0 
call :parentfolder %SUBDIR:~0,-1% 
endlocal 
goto :eof 

:parentfolder 
echo %~dp1 
goto :eof 
相關問題