了解从 C# 调用的批处理文件中使用 %~dp0
的路径更改
执行包含以下内容的批处理文件:
<code class="language-batch">echo %~dp0 CD Arvind echo %~dp0</code>来自 C# 程序的
可能会导致 %~dp0
命令后的 CD
显示修改后的路径。 此行为与批处理文件的直接执行不一致。
根本原因:
该行为是由于 cmd.exe 处理 %~0
变量的方式造成的。从 C# 启动时,带引号的参数 ("%~0"
) 可能在内部不带引号,从而导致批处理文件的相对路径引用而不是绝对路径。
解决路径问题
以下是确保路径检索一致的解决方案:
来自 C#:
省略引号: 调用不带引号的批处理文件:cmd /c batchfile.cmd
提供完整路径:如果需要引号,请在 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中文网其他相关文章!