Как программист 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
Заранее благодарим вас за любое решение этой проблемы.
С уважением,