【问题标题】:How to extract folder path from a string in a batch script如何从批处理脚本中的字符串中提取文件夹路径
【发布时间】:2011-10-04 20:25:04
【问题描述】:

我一直致力于构建一个打包实用程序,它基本上获取两个 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/"

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

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

【问题讨论】:

标签: svn batch-file diff xcopy


【解决方案1】:

几乎和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

【讨论】:

  • 这也不起作用..输出是 C:\temp1\temp2\temp3\temfile.txt ,而我正在寻找的输出只是 \temp1\temp2\temp3,没有驱动器号...
  • for /? 中的解释,d=drive p=path,所以你可以在你的情况下使用set "%1=%~p2"
  • 如果调用在 FOR 循环中,这将不起作用。我该如何解决这种情况?
  • @ScottChu 我看不出有什么问题,但你应该用你的代码提出一个新问题
【解决方案2】:
@echo off
setlocal
SET SUBDIR=%~dp0
call :parentfolder %SUBDIR:~0,-1% 
endlocal
goto :eof

:parentfolder
echo %~dp1
goto :eof

【讨论】:

    猜你喜欢
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多