Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn 如何从批处理脚本中的字符串提取文件夹路径_Svn_Batch File_Diff_Xcopy - Fatal编程技术网

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

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/

我一直致力于构建一个打包实用程序,它基本上可以在两个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/"
我需要在批处理文件中,仅提取文件夹路径并删除文件名。在批处理文件中执行此操作的最佳方法是什么


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

这几乎和在

关键是要使用%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