在Windows 10下在批处理文件中获取目录或文件简称的问题

作为一名Java软件程序员,我经常为我的软件创建批处理脚本。 在这些脚本中,我得到了使用的文件夹的简称,以确保该软件可以在命令提示符(cmd)下使用。 但是然后,我在Windows 10上的一个用户告诉我该软件无法在他的计算机上运行。 经过一番研究,我发现曾经为我提供文件夹简称的算法在他的计算机上不起作用

我在具有不同Windows版本的各种计算机上尝试了相同的测试代码,但仅在他的计算机上,我无法获得预期的简称。

提取短名称的测试代码(对法语文本表示抱歉:它适用于法语用户):

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
@ECHO -------------------------------------
@ECHO Version de Windows :
ver
@ECHO -------------------------------------
REM Test de nom court
SET ROOT_DIR=%~dp0
SET TMP_DIR=""
REM for "usebackq delims=" /d %%I in ("%ROOT_DIR%") do (
for /d %%I in ("%ROOT_DIR%") do (
  if %TMP_DIR% == "" (
    SET TMP_DIR=%%~sI
  )
)
@ECHO test nom court du dossier courant: '%TMP_DIR%'
PAUSE

例如,使用此文件夹(具有故意的长名称)并指定批处理代码:

D:\aa aaaaaa aa\vcxvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\ccccccccccggggggggggggttttttttttttttttrrrrrrrrr           dsdqkdhqk  ;
  • 在Windows 7计算机上,我得到以下结果:
-------------------------------------
Version de Windows :

microsoft Windows [version 6.1.7601]
-------------------------------------
test nom court du dossier courant: 'D:\AAAAAA~1\VCXVVV~1\CCCCCC~1\'
Appuyez sur une touche pour continuer...
  • 在用户的Windows 10计算机上,我得到以下结果:
-------------------------------------
Version de Windows :

microsoft Windows [version 10.0.17134.1040]
-------------------------------------
test nom court du dossier courant: 'D:\aa aaaaaa aa\vcxvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\ccccccccccggggggggggggttttttttttttttttrrrrrrrrr           dsdqkdhqk  ;'
Appuyez sur une touche pour continuer...

由于这种回答,我的批处理脚本无法工作,因为命令提示符将在太长​​的行中引发错误。

有人知道如何在Windows 10上获得预期的简称吗?

我不知道是否有帮助(我不是Windows专家),但是我在regedit的计算机上进行了一些研究,发现了这些内容:

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\FileSystem\NtfsAllowExtendedCharacter8dot3Rename = 0

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\FileSystem\NtfsDisable8dot3NameCreation = 2

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet\Control\FileSystem\NtfsAllowExtendedCharacter8dot3Rename = 0

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet\Control\FileSystem\NtfsDisable8dot3NameCreation = 2

预先感谢您提供解决该问题的方法。

此致

kirecetycike 回答:在Windows 10下在批处理文件中获取目录或文件简称的问题

@Compo的答案正确: 我的用户有带SSD的Windows 10专业版。 在Windows 10(至少是pro)上,关于SSD的默认行为似乎是“不允许短文件名”。

因此,我使用以下命令并以管理员身份运行PowerShell,将“ NtfsDisable8dot3NameCreation”注册表值设置为0:

Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\FileSystem\" -Name NtfsDisable8dot3NameCreation -Value 0

重新启动计算机并将软件安装到新文件夹后,它确实可以工作。

唯一的限制是在以前创建的文件夹中不起作用:这些文件夹不是使用短名称创建的,因此无法获得其短名称...

本文链接:https://www.f2er.com/3152523.html

大家都在问