Я пытаюсь преобразовать длинное имя файла в короткое имя файла (8.3) в Windows.
Пакетный файл с аргументом командной строки работает по назначению:
short.bat:
@echo OFF
echo %~s1
вызов short.bat C:\Documents and Settings\User\NTUSER.DAT
возвращает C:\DOCUM~1\USER\NTUSER.DAT
Однако мне не нравится иметь дополнительный .bat файл для этого. Я бы предпочел называть cmd.exe
всей командой из ruby script.
Как я могу это сделать?
В качестве промежуточного шага я пытался жестко кодировать путь в пакетном файле, но это не работает:
short1.bat:
@echo OFF
SET filename="C:\Documents and Settings\User\NTUSER.DAT"
echo %filename%
echo %~sfilename%
echo %filename%
работает, но echo %~sfilename%
дает следующую ошибку:
The following usage of the path operator in batch-parameter
substitution is invalid: %~sfilename%
For valid formats type CALL /? or FOR /?
Если short1.bat работает, как я могу преобразовать его в однострочный, который можно вызвать с помощью cmd.exe \c ...
?
Возникает еще один вопрос (как получить путь к DOS вместо пути к Windows), однако тот, кто задает путь к текущему каталогу, задает особый вопрос.