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