You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决GitHub Action中Windows 8.3短路径与长路径对比不等问题

问题解决方法

你遇到的是Windows系统下8.3短文件名(如RUNNER~1)和长文件名(如runneradmin)的字符串格式差异问题,两个路径实际指向同一个位置,只需要将参与对比的路径统一转为同一种格式即可正常判断相等。

方案1:统一转短文件名对比

通过cmd的for命令扩展修饰符~s可以将任意路径转为短文件名格式,修改你的脚本对比逻辑:

:: 转换路径为统一短名格式
for %%i in ("%WORKON_HOME%\name with spaces") do set CHECK_PATH=%%~si
for %%i in ("%VIRTUAL_ENV%") do set VENV_PATH=%%~si

if "%CHECK_PATH%"=="%VENV_PATH%" (
    echo workon home and virtualenv are equal
) else (
    echo "%CHECK_PATH%" is not equal to "%VENV_PATH%"
)

:: 第二个对比逻辑同理
for %%i in ("%CD%") do set CD_PATH=%%~si
for %%i in ("%VIRTUAL_ENV%") do set VENV_PATH=%%~si

if "%CD_PATH%"=="%VENV_PATH%" (
    echo cd and virtualenv are equal
) else (
    echo "%CD_PATH%" is not equal to "%VENV_PATH%"
)

方案2:统一转长文件名对比

如果需要保留路径可读性,用修饰符~f将路径统一转为全路径长文件名格式即可,逻辑和上述一致:

for %%i in ("%WORKON_HOME%\name with spaces") do set CHECK_PATH=%%~fi
for %%i in ("%VIRTUAL_ENV%") do set VENV_PATH=%%~fi

:: 后续对比逻辑和方案1相同

源头规避方案(可选)

你可以在脚本最开头先将系统内置的TMP变量强制转为长路径格式,后续所有基于TMP生成的路径都会统一为长文件名,从根源避免短名问题:

@echo off
:: 开头先修正TMP变量为长路径格式
for %%i in ("%TMP%") do set TMP=%%~fi
:: 后续原有脚本逻辑不变
set "WORKON_HOME=%TMP%\wo home %RANDOM%"
:: ......

内容的提问来源于stack exchange,提问作者thebjorn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:15:03