在批处理文件中,组合两个字符串以创建组合路径字符串

2024-01-01

我需要获取两个字符串并将它们组合成批处理文件中的单个路径字符串,类似于 .NET 中的 Path.Combine 方法。例如,无论字符串是“C:\trunk”和“ProjectName\Project.txt”还是“C:\trunk\”和“ProjectName\Project.txt”,组合路径都将为“C:\trunk\ProjectName” \项目.txt”。

我尝试过使用 PowerShell 的 join-path 命令,该命令有效,但我需要一种方法将此值传递回批处理文件。我尝试使用环境变量来实现这一点,但没有成功。对我来说,一种选择是将所有代码移至 PowerShell 脚本中,并完全避免使用批处理文件。但是,如果我必须在批处理文件中执行此操作,我该怎么做?


您在子进程中设置的环境变量无法传递给调用进程。进程的环境是其父进程环境的副本,但反之则不然。但是,您可以简单地在 PowerShell 中输出结果并从批处理文件中读取该输出:

for /f "delims=" %%x in ('powershell -file foo.ps1') do set joinedpath=%%x

尽管如此,由于 PowerShell 需要大约一秒钟的时间来启动,这可能不是最佳选择。您当然可以使用以下小子例程在批处理文件中完成此操作:

:joinpath
set Path1=%~1
set Path2=%~2
if {%Path1:~-1,1%}=={\} (set Result=%Path1%%Path2%) else (set Result=%Path1%\%Path2%)
goto :eof

这只是查看第一个字符串的最后一个字符,如果它不是反斜杠,它将在两者之间添加一个 - 实际上非常简单。

示例输出:

JoinPath "C:\trunk" "ProjectName\Project.txt"
-- C:\trunk\ProjectName\Project.txt
JoinPath "C:\trunk\" "ProjectName\Project.txt"
-- C:\trunk\ProjectName\Project.txt

代码和示例批处理文件可以找到在我的 SVN 中 http://svn.lando.us/joey/Public/SO/3114146但在这里复制,因为它们无论如何都很简短:

@echo off
echo JoinPath "C:\trunk" "ProjectName\Project.txt"
call :joinpath "C:\trunk" "ProjectName\Project.txt"
echo -- %Result%

echo JoinPath "C:\trunk\" "ProjectName\Project.txt"
call :joinpath "C:\trunk\" "ProjectName\Project.txt"
echo -- %Result%

goto :eof

:joinpath
set Path1=%~1
set Path2=%~2
if {%Path1:~-1,1%}=={\} (set Result=%Path1%%Path2%) else (set Result=%Path1%\%Path2%)
goto :eof
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在批处理文件中,组合两个字符串以创建组合路径字符串 的相关文章

随机推荐

  • 没有提交按钮的表单验证AngularJS

    我想要验证没有提交按钮的表单 div div
  • .NET 图表中的 X 轴仅使用自定义标签

    我正在用 C 制作一个 X 轴间隔为数周的 N ET 折线图 对于我的项目 我只想使用自定义标签 但现在我仍然想要网格线 有谁知道如何隐藏默认 X 轴标签 同时仍保留自定义标签 我试过这个 Chart4 ChartAreas 0 AxisX
  • 强制在子方法之前执行父方法,无需显式调用

    我正在开发一个 C 应用程序 但遇到了一个问题 我有一个从抽象类 A 派生的类 B 它具有一些事件处理方法 第三个类 C 派生自 B 并且必须重新实现 B 的一些方法 有没有一种方法可以在调用 C 的方法之前隐式调用 B 的方法 类图 cl
  • 要在 R 中列出的文本文件

    我有一个很大的文本文件 每行都有可变数量的字段 每行中的第一个条目对应于一个生物途径 每个后续条目对应于该途径中的一个基因 前几行可能看起来像这样 path1 gene1 gene2 path2 gene3 gene4 gene5 gene
  • O(n) 算法查找 n² 隐式数字的中位数

    问题 输入是一个 不一定是排序的 序列 S k1 k2 kn 由 n 个任意数字组成 考虑 min ki kj 形式的 n 个数的集合 C 其中 1 O n 时间和O n 空间算法求 C 的中位数 到目前为止 我通过检查 C 的不同集合 S
  • 如何正确对齐跨度和输入元素?

    我想对齐一个 span 元素和 span
  • 使用 WPF 的 ShowDialog 打开表单时出现异常

    我有一个 WPF 应用程序 当尝试使用以下命令打开表单时ShowDialog 我在一台机器上遇到了下面这个奇怪的异常 知道可能是什么问题吗 异常消息 操作已中止 HRESULT 异常 0x80004004 E ABORT 异常堆栈跟踪 在
  • 如何在不编写自己的程序的情况下将某些文件上传到 Azure Blob 存储?

    我创建了一个 Azure 存储帐户 我有一个 400 MB 的 zip 文件 我想将其放入 Blob 存储中以供以后使用 我怎样才能在不编写代码的情况下做到这一点 有一些接口吗 免费工具 Visual Studio 2010 安装Azure
  • 使用命名空间时找不到 SimpleXMLElement

    我正在尝试在 Wordpress 中创建一个小部件 但在创建 SimpleXMLElement 对象时遇到了问题 这是代码 namespace GenieKnows Search class GenieKnows Search Widget
  • 诊断无法停止的应用程序

    我们的Windows应用程序经常挂在内存中 我正在尝试使用windbg来跟踪 下问题 我对 Windbg 很陌生 需要一些建议 我 已经开始阅读高级 Windows 调试 该应用程序是用 VB 编写的 C 和 COM 对象的混合体 偶尔当
  • iOS 部署目标设置为 iOS 4.2。该应用程序可以在运行早期版本 iOS 的设备上运行吗?

    如果应用程序在 Xcode 中编译 其 iOS 部署目标设置为 iOS 4 2 它是否可以在运行早期版本 iOS 的设备上运行 该应用程序不具有 iOS 4 独有的功能 我全新安装了 Snow Leopard 和 XCode 3 2 5 并
  • 如何从 html 页面调用 javascript 模块 (type=module) 中声明的函数

    我正在努力使用 javascript 模块 我有一个 html 文件和一个 JS 模块 我在 javascript 文件中定义了一个函数 我想从我的 HTML 页面调用该函数 这是我的代码 索引 html
  • 使用 Reactor 的非阻塞 ReentrantLock

    我需要限制同时处理同一资源的客户端数量所以我尝试实现模拟 lock lock try do work finally lock unlock 但以非阻塞方式使用 Reactor 库 我有这样的东西 但我有一个问题 有一个更好的方法吗或者也许
  • Groovy:将 XML 元素从一个文档复制到另一个文档

    我是 Groovy 新手 遇到了一个简单的问题 我想做的就是从一个 XML 文件中提取某些元素并用它创建一个新文件 这是一个示例 XML 让我们使用 Maven pom 文件
  • 在子数组之间移动行

    我有许多子数组 比如 2 个 为了简单起见 每个子数组具有相同的行数和列数 子数组中的每个位置都由 1 10 中的数字占据 我想做的是根据某种移动速率 m 0 1 在子数组之间随机移动行 m 0 对应于不移动 而 m 1 表示所有子数组中的
  • 初始化的只读字段为空,为什么?

    谁能解释一下为什么private readonly Int32 array new 8 7 5 can be null 在这个例子中 它有效 并且 array总是不是null 但在我的公司代码中我有类似的代码并且 array总是null 所
  • 来自命令行的 Behat“base_url”

    我想知道是否可以通过命令行设置base url 例子 bin behat base url http google fr 为了灵活性 我想避免创建新的配置文件并在每次必须测试新的 url 时通过命令行传递它 这里有什么技巧可以做到这一点吗
  • 使用 Spring MVC 的 Twitter Bootstrap

    我想将 Twitter Bootstrap 与现有的 Spring MVC 项目集成 搜索返回抽象结果 没有概述如何将以 UI 为中心的 Bootstrap 与 Spring MVC 集成的教程或文章 集成框架所涉及的配置步骤是什么 Tha
  • scala zip 列表到元组

    使用 JodaTime 尝试将 List LocalDate 转换为 Tuple2 JodaTime JodaTime 这样我就可以像这样进行多重分配 val expire now List row expireDate new JodaD
  • 在批处理文件中,组合两个字符串以创建组合路径字符串

    我需要获取两个字符串并将它们组合成批处理文件中的单个路径字符串 类似于 NET 中的 Path Combine 方法 例如 无论字符串是 C trunk 和 ProjectName Project txt 还是 C trunk 和 Proj