CMD行判断文件/路径是本地还是远程?

时间:2011-06-27 17:39:45

标签: batch-file cmd

从NT shell脚本,我需要能够判断目标路径是在本地驱动器上(如C:\还是D:\)还是在远程/映射驱动器上({{{ 1}}或映射的驱动器号如\\UNC\path)...有什么建议吗?

4 个答案:

答案 0 :(得分:1)

以下是我的想法。目标文件/路径作为参数%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

答案 1 :(得分:1)

@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

注意:NT6 +上的UNC符号链接可能会失败

答案 2 :(得分:0)

你最好的选择是使用这样的东西:

fsutil fsinfo drivetype X:

但是,由于fsutil的输出,相应的代码可能依赖于语言。如果这不是问题,那么最好使用fsutil的输出进行标记化。

答案 3 :(得分:-2)

Ruby中的基本识别脚本,不支持映射驱动程序。

where_placed.rb:

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

> ruby where_placed.rb "C:\file.dat> “本地”

> ruby where_placed.rb "\\REMOTEMACHINE\file.dat> “远程”