Проблема с получением каталога или короткого имени файла в командном файле под Windows 10 - PullRequest
0 голосов
/ 06 ноября 2019

Как программист 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

Заранее благодарим вас за любое решение этой проблемы.

С уважением,

1 Ответ

0 голосов
/ 07 ноября 2019

@ Compo дал правильный ответ: у моего пользователя Windows 10 Pro с SSD. В windows 10 (по крайней мере, pro) поведение по умолчанию для SSD выглядит так: «не разрешать короткие имена файлов».

Итак, я установил значение реестра «NtfsDisable8dot3NameCreation» в 0, используя эту команду при запуске PowerShellкак администратор:

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

После перезагрузки компьютера и установки моего программного обеспечения в новую папку, он заработал.

Единственное ограничение - это то, что не работаетв ранее созданных папках : эти папки не были созданы с короткими именами, поэтому нет возможности получить их короткое имя ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...