Как сделать так, чтобы пакетный файл обнаруживал, является ли каталог на самом деле Junction? - PullRequest
5 голосов
/ 30 января 2011

Я пишу Batch-файл (.bat) и не могу найти способ узнать, является ли данный каталог, к которому у меня есть путь, реальным каталогом или Junction (созданным в Windows 7 с помощью mklink /j ). Кто-нибудь может указать мне правильное направление?

Ответы [ 3 ]

11 голосов
/ 01 марта 2011

В пакетном скрипте вы можете использовать следующее:

 SET Z=&& FOR %%A IN (linkfilename) DO SET Z=%%~aA
 IF "%Z:~8,1%" == "l" GOTO :IT_A_LINK

это быстрее, чем звонить DIR /AL.

%%~aA получает атрибуты "linkfilename",
строка из 9 символов, такая как d-------- (каталог),
или d-------l ссылка на каталог,
или --------l ссылка на файл.

%Z:~8,1% затем захватывает только атрибут точки повторной обработки.

2 голосов
/ 05 июня 2014

У меня есть этот маленький драгоценный камень, который перечислит все соединения и их цели в вашем текущем каталоге:

for /F "delims=;" %j in ('dir /al /b') do @for /F "delims=[] tokens=2" %t in ('dir /a ^| findstr /C:"%j"') do @echo %j :: %t

Пример вывода:

Application Data :: C:\Users\AB029076\AppData\Roaming
Cookies :: C:\Users\AB029076\AppData\Roaming\Microsoft\Windows\Cookies
Local Settings :: C:\Users\AB029076\AppData\Local
My Documents :: C:\Users\AB029076\Documents
NetHood :: C:\Users\AB029076\AppData\Roaming\Microsoft\Windows\Network Shortcuts
PrintHood :: C:\Users\AB029076\AppData\Roaming\Microsoft\Windows\Printer Shortcuts
Recent :: C:\Users\AB029076\AppData\Roaming\Microsoft\Windows\Recent
SendTo :: C:\Users\AB029076\AppData\Roaming\Microsoft\Windows\SendTo
Start Menu :: C:\Users\AB029076\AppData\Roaming\Microsoft\Windows\Start Menu
Templates :: C:\Users\AB029076\AppData\Roaming\Microsoft\Windows\Templates
TestLink :: C:\Users\AB029076\AppData\Roaming\Microsoft\Windows\Network Shortcuts
0 голосов
/ 30 января 2011

Это паршивая техника, но fsutil reparsepoint query путь к файлу не удастся (%ERRORLEVEL% будет 1), если файл не является соединением, и удастся (%ERRORLEVEL% будет 0), если это один. Другая проблема с этим - fsutil хочет, чтобы вы были администратором. Кроме того, не все точки повторной обработки являются соединениями каталогов.

...