在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 aavcxvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvccccccccccggggggggggggttttttttttttttttrrrrrrrrr           dsdqkdhqk  ;
  • 在Windows7计算机上,我得到以下结果:
-------------------------------------
Version de Windows :
Microsoft Windows [version 6.1.7601]
-------------------------------------
test nom court du dossier courant: 'D:AAAAAA~1VCXVVV~1CCCCCC~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 aavcxvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvccccccccccggggggggggggttttttttttttttttrrrrrrrrr           dsdqkdhqk  ;'
Appuyez sur une touche pour continuer...

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

有人知道如何在windows 10上获得预期的短名称吗?

我不知道它是否会有帮助(我不是windows专家(,但我在他的电脑上用regedit做了一些研究,我发现了这些:

HKEY_LOCAL_MACHINESYSTEMControlSet001ControlFileSystemNtfsAllowExtendedCharacter8dot3Rename = 0
HKEY_LOCAL_MACHINESYSTEMControlSet001ControlFileSystemNtfsDisable8dot3NameCreation = 2
HKEY_LOCAL_MACHINESYSTEMControlSetControlFileSystemNtfsAllowExtendedCharacter8dot3Rename = 0
HKEY_LOCAL_MACHINESYSTEMControlSetControlFileSystemNtfsDisable8dot3NameCreation = 2

提前感谢你为那个问题提供的任何解决方案。

问候,

@Compo给出了正确的答案:我的用户有带SSD的windows 10 pro。在windows 10(至少是专业版(上,SSD的默认行为似乎是"不允许短文件名"。

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

Set-ItemProperty -Path "HKLM:SystemCurrentControlSetControlFileSystem" -Name NtfsDisable8dot3NameCreation -Value 0

在重新启动计算机并将软件安装到新文件夹后,它确实起了作用。

唯一的限制是它在以前创建的文件夹中不起作用:这些文件夹不是用短名称创建的,因此不可能获得它们的短名称。。。

相关内容

  • 没有找到相关文章