首页 > 解决方案 > 这是获取正在执行批处理文件的文件夹的合法“技巧”吗?

问题描述

我正在调试一个复杂的脚本,该脚本在具有标准 8dot3name 约定但在缩短的名称不遵循“标准”(无论是什么)的 Windows 10 系统上正确“工作”(即使有错误)

我的测试批处理文件是“runtest.bat”,它在我的“documents\win_build”文件夹中

@echo off
SET BUILDROOT=%~dps0
ECHO 1------%BUILDROOT%
SET BUILDROOT=%BUILDROOT:\win_bu~1\=%
ECHO 2------%BUILDROOT%

输出是

C:\Users\josep\Documents\WIN_BUILD>runtest.bat
1------C:\Users\josep\DOCUME~1\WIN_BU~1\
2------C:\Users\josep\DOCUME~1

所需的输出是正确的“2 ---”行。请注意,后面没有反斜杠,这很重要***

我遇到的问题是win_bu~1它并不总是简称。在我的 NFS 上,win_build 的简称实际上是WOH7UM~G,构建脚本将失败。

我可以得到实际的缩短名称

for %%I in (.) do SET SHORT_WIN_BUILD=%%~nsxI

以上给了我正确的 win_bu~1 或 WOH7UM~G

当然,有一种更好的方法可以使用缩短的名称来获取不带文件夹的文件夹。我认为这个脚本被写得尽可能迟钝。

*** %~dp0获取当前目录,但有一个尾随反斜杠,我不知道如何删除并且不希望重新编写脚本来解决额外的反斜杠。

标签: cmd

解决方案


推荐阅读