Hatifnatt
Цитата:
|
расскажи как это делается
|
К сожалению, бОльшая часть моего предущего поста потерялась (после редактирования) - сервер вчера выдавал сообщение, что мол перегружен, а я не обратил внимание. Ну да ладно. Расказываю. Делается, например, так.
Задача: из командного файла найти короткое имя соответствующее заданому длиному.
Ограничения: линейка NT (NT4,XP,2000,2003,...) ибо возиться для 9х нет ни желания ни самой системы для тестирования

Решение:
Командный файл, который будет использован для определения короткого имени (GetShortName.cmd):
Код:
@setlocal enableextensions
@if /i "%~1" == "/full" goto full
@set _sn_=%~s2
@call:name %_sn_%
@endlocal & set %~1=%_sn_%
@goto:eof
:full
@endlocal & set %~2=%~s3
@goto:eof
:name
@set _sn_=%~nx1
Использование из другого командного файла:
call GetShortName [/full] var file
где
/full - получить полный путь к файлу, иначе только имя с расширением
var - переменная среды, которой будет присвоено короткое имя
file - имя файла
Тестируем (TestShortName.cmd):
Код:
@echo off
call GetShortName sn1 "C:\Program Files\Common Files"
echo ^<%sn1%^>
call GetShortName /full sn1 "C:\Program Files\Common Files"
echo ^<%sn1%^>
call GetShortName sn2 "C:\Program Files\Common Files\Microsoft Shared\TextConv\EXCEL32.CNV"
echo ^<%sn2%^>
call GetShortName /full sn2 "C:\Program Files\Common Files\Microsoft Shared\TextConv\EXCEL32.CNV"
echo ^<%sn2%^>
Написано наспех, желающие могут доработать

, например сделать проверку параметров, существование файла/папки и т.д.