如何从批处理脚本中的字符串中提取文件夹路径

时间:2011-10-04 20:25:05

标签: svn batch-file diff xcopy

我一直致力于构建一个打包实用程序,它基本上可以在两个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} 

其中需要从上面更改的列表中提取文件夹路径,例如

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

我需要在我的批处理文件中,只提取文件夹路径并删除文件名。在批处理文件中执行此操作的最佳方法是什么?

有没有不同的方法来实现我想要做的事情?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

:parentfolder
echo %~dp1
goto :eof