CMD строка, чтобы сказать, является ли файл / путь локальным или удаленным? - PullRequest
3 голосов
/ 27 июня 2011

Из сценария оболочки NT мне нужно знать, находится ли целевой путь на локальном диске (например, C:\ или D:\) или на удаленном / подключенном диске (либо \\UNC\path, либо на подключенном диске). письмо типа Z:) ... Есть предложения?

Ответы [ 4 ]

1 голос
/ 27 июня 2011
@echo off
goto main

:isremote
setlocal
set _isremote=0
if "%~d1"=="\\" (set _isremote=1) else (
    (>nul 2>&1 net use "%~d1") && set _isremote=1
)
endlocal&set isremote=%_isremote%&goto :EOF

:test
call :isremote "%~1"
echo %isremote% == %~1
@goto :EOF

:main
call :test c:
call :test c:\
call :test c:\windows
call :test \\foo
call :test \\foo\
call :test \\foo\bar
call :test \\foo\bar\baz
call :test z:
call :test z:\
call :test z:\temp

В моей системе, где z: подключенный диск, я получаю:

0 == c:
0 == c:\
0 == c:\windows
1 == \\foo
1 == \\foo\
1 == \\foo\bar
1 == \\foo\bar\baz
1 == z:
1 == z:\
1 == z:\temp

Примечание.

1 голос
/ 27 июня 2011

Вот то, что я придумал.Целевой файл / путь передается как параметр% 1.

set REMOTE=0
set TEST=%~f1
if "%TEST:~0,2%"=="\\" (
    echo *** target is a remote UNC path
    set REMOTE=1
) else (
    for /f "skip=6 tokens=2" %%d in ('net use') do (
        if /i "%TEST:~0,2%"=="%%d" (
            echo *** target is a remote mapped drive
            set REMOTE=1
        )
    )
)
if %REMOTE%==0 echo *** target is a local file/directory
0 голосов
/ 27 июня 2011

Лучше всего использовать что-то вроде этого:

fsutil fsinfo drivetype X:

Однако соответствующий код может зависеть от языка из-за вывода из fsutil.Если это не проблема, лучше всего использовать токены и использовать вывод fsutil.

0 голосов
/ 27 июня 2011

Базовый скрипт распознавания в Ruby, не поддерживает сопоставленные драйверы.

where_placed.rb:

path = ARGV[0]
if path.start_with? "\\"
  puts "remote"
else
  puts "local"
end

> ruby where_placed.rb "C:\file.dat> "local"

> ruby where_placed.rb "\\REMOTEMACHINE\file.dat> «дистанционный»

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