Svn 如何从批处理脚本中的字符串提取文件夹路径
我一直致力于构建一个打包实用程序,它基本上可以在两个SVN版本之间获取所有添加/修改的文件,然后在本地复制并压缩它们。到目前为止,我已经能够成功地提取两个版本之间所有更改的文件 更进一步,我使用xcopy在某个目录下递归创建文件夹 假设在使用svn diff命令检查两个修订时,以下文件已更改Svn 如何从批处理脚本中的字符串提取文件夹路径,svn,batch-file,diff,xcopy,Svn,Batch File,Diff,Xcopy,我一直致力于构建一个打包实用程序,它基本上可以在两个SVN版本之间获取所有添加/修改的文件,然后在本地复制并压缩它们。到目前为止,我已经能够成功地提取两个版本之间所有更改的文件 更进一步,我使用xcopy在某个目录下递归创建文件夹 假设在使用svn diff命令检查两个修订时,以下文件已更改 /temp1/temp2/temp3/temfile.txt /temp1/temp21/temp31/tempfile.txt /temp1/temp2/ (folder created) /temp1/
/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/"
我需要在批处理文件中,仅提取文件夹路径并删除文件名。在批处理文件中执行此操作的最佳方法是什么
有没有不同的方法来实现我想做的事情?这几乎和在 关键是要使用%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
你应该提前5小时阅读帖子:恐怕这不能解决我的问题!该解决方案适用于目录,并与bat文件所在的路径相关。如果您仔细阅读我的问题,它与处理包含目录路径的字符串有关。也许您可以找到我对[此处类似帖子][1]的回答。[1] :这也不起作用..输出是C:\temp1\temp2\temp3\temfile.txt,其中我要查找的输出只是\temp1\temp2\temp3,没有驱动器号…如
中所述/?
解释了,d=drive p=path,因此您可以在您的情况下使用设置“%1=%~p2”
如果调用在for循环中,则这不起作用。我如何解决这个问题?@ScottChu我看不出有什么问题,但你应该用你的代码提出一个新问题
@echo off
setlocal
SET SUBDIR=%~dp0
call :parentfolder %SUBDIR:~0,-1%
endlocal
goto :eof
:parentfolder
echo %~dp1
goto :eof