cmd - 这是获取正在执行批处理文件的文件夹的合法“技巧”吗?
问题描述
我正在调试一个复杂的脚本,该脚本在具有标准 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
获取当前目录,但有一个尾随反斜杠,我不知道如何删除并且不希望重新编写脚本来解决额外的反斜杠。
解决方案
推荐阅读
- python - Paramiko / Netmiko SSH 错误 - 'paramiko.buffered_pipe.PipeTimeout'
- html - 如何使语音气泡出现在文本中的悬停上
- c++ - c ++我如何添加一个双精度和一个字符串来制作一个字符串?
- odoo - 在 Odoo10 中更新树中的兄弟行
- excel - 如何使用 VBA 正确获取 Word 中光标的位置?
- javascript - Angular 测试,模拟服务,只是构建其他服务
- php - 如何识别调用 API 端点的应用或网站?
- java - Spring JPA 保存并不总是在 DB 上执行
- kotlin - 如何将我作为参数传递的函数定义为可为空的?
- oracle - 从 Oracle 中的一组表中导出数据