首页 >后端开发 >C++ >为什么从 C# 调用时`%~dp0` 会更改目录路径?

为什么从 C# 调用时`%~dp0` 会更改目录路径?

Patricia Arquette
Patricia Arquette原创
2025-01-09 21:47:42604浏览

Why Does `%~dp0` Change Directory Paths When Called from C#?

了解从 C# 调用的批处理文件中使用 %~dp0 的路径更改

执行包含以下内容的批处理文件:

<code class="language-batch">echo %~dp0
CD Arvind
echo %~dp0</code>
来自 C# 程序的

可能会导致 %~dp0 命令后的 CD 显示修改后的路径。 此行为与批处理文件的直接执行不一致。

根本原因:

该行为是由于 cmd.exe 处理 %~0 变量的方式造成的。从 C# 启动时,带引号的参数 ("%~0") 可能在内部不带引号,从而导致批处理文件的相对路径引用而不是绝对路径。

解决路径问题

以下是确保路径检索一致的解决方案:

来自 C#:

  1. 省略引号: 调用不带引号的批处理文件:cmd /c batchfile.cmd

  2. 提供完整路径:如果需要引号,请在 C# 命令中指定批处理文件的完整路径。

来自批处理文件:

使用子例程来可靠地确定批处理文件的路径:

<code class="language-batch">@echo off
setlocal enableextensions disabledelayedexpansion

call :getCurrentBatch batchPath
echo %batchPath%

exit /b

:getCurrentBatch variableName
    set "%~1=%~f0"
    goto :eof</code>

该子例程使用%~f0获取批处理文件的完全限定路径,并将其存储在指定的变量中。 此方法避免了从外部应用程序调用时 %~dp0 变量的行为引起的不一致。

以上是为什么从 C# 调用时`%~dp0` 会更改目录路径?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn