C#调用批处理文件时%~dp0变量行为差异分析
直接运行批处理文件时,%~dp0变量代表批处理文件的完整路径。然而,当从C#程序中使用引号调用批处理文件时,更改目录后%~dp0的值会发生变化。
原因分析
这个问题源于cmd.exe处理带引号的%~0参数的方式。当批处理文件以引号形式启动时,引号会被移除,批处理调用会相对于当前目录进行。因此,当批处理文件内部更改目录时,%~dp0会跟随相对路径变化,导致值不同。
解决方案
C#端解决方案:
cmd /c batchfile.cmd
批处理文件端解决方案:
创建一个子程序来可靠地获取批处理文件的路径:
<code class="language-batch">@echo off setlocal enableextensions disabledelayedexpansion call :getCurrentBatch batch echo %batch% exit /b :getCurrentBatch variableName set "%~1=%~f0" goto :eof</code>
此子程序确保无论如何调用,都能获取批处理文件的完整路径。
以上是为什么从 C# 调用%~dp0 会更改批处理文件中的目录?的详细内容。更多信息请关注PHP中文网其他相关文章!