從NT shell腳本中,我需要能夠判斷目標路徑是否位於本地驅動器(如C:\
或D:\
)或遠程/映射驅動器上(\\UNC\path
或映射的驅動器盤符如Z:
)...有什麼建議麼?CMD行告訴文件/路徑是本地還是遠程?
回答
@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
注:可能會在UNC符號鏈接失敗在NT6 +
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
> 「遠程」
有關映射驅動器,它們是什麼遠程但不要不要從\\開始。以及爲什麼紅寶石,如果檢查\\是足夠的,你可以在一個批處理文件中做到這一點... – Anders
我luv紅寶石,但唉它不夠便攜,這個腳本,它必須是「純」的CMD外殼。 – ewall
以'\\?\'開頭且不*遠程的本地路徑怎麼樣? – 0xC0000022L
下面是我想出了。目標文件/路徑作爲參數%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
'\\?\ C:'以兩個反斜槓開始......並且很可能是本地路徑。事實上,你可以在Win32 API中打破260個字符的路徑長度。 – 0xC0000022L
@STATUS_ACCESS_DENIED:雖然這是真的,但記錄爲「僅將%I擴展爲驅動器號」的%〜dI的cmd.exe內置擴展器對於「\\?\ C:」也會失敗,因爲它將返回「\\」 – Anders
最好的辦法就是用這樣的:
fsutil fsinfo drivetype X:
然而,相應的代碼可能會依賴於語言的,由於從FSUTIL輸出。如果這不是問題,則最好使用fsutil的標記和使用輸出。
fsutil需要XP上的管理員權限... – Anders
@Anders:公平點。所以 ...? :) – 0xC0000022L
- 1. 如何判斷URL是本地文件路徑還是遠程文件路徑
- 2. 確定給定的文件路徑字符串是遠程還是本地
- 3. 確定路徑是本地路徑還是網絡路徑
- 4. 路徑永遠是文件還是目錄是真的嗎?
- 5. SqlConnection - 是遠程還是本地連接?
- 6. CMD,路徑不是文件名
- 7. 告訴JAXP DTD文件的路徑
- 8. 這是在本地還是遠程運行?
- 9. 測試角色發件人是本地還是遠程
- 10. 以編程方式知道給定的路徑在Mac OS X上是網絡路徑還是本地路徑
- 11. 如何判斷字符串是URL還是本地路徑?
- 12. 如何告訴mercurial 1.放棄本地文件2.使用遠程文件
- 13. 檢查路徑是UNC路徑還是本地路徑的正確方法是什麼?
- 14. 如何確定給定路徑是文件還是文件夾?
- 15. Powershell檢查路徑是文件夾還是文件
- 16. 上傳文件本地路徑:XXX遠程路徑:XXX I/O錯誤:EOF
- 17. 檢測路徑是絕對路徑還是相對路徑
- 18. 檢查路徑是絕對路徑還是相對路徑
- 19. 檢查COM方法調用是本地還是遠程
- 20. 這是git分支本地還是遠程?
- 21. 如何判斷SQL Server是本地還是遠程?
- 22. 確定分支是遠程還是本地(使用JGit)?
- 23. 如何檢查GLXcontext是遠程還是本地
- 24. 如何知道標籤是本地還是遠程?
- 25. 如何在編譯時告訴項目是程序還是庫?
- 26. 確定路徑字符串是本地計算機還是遠程計算機的方法
- 27. 如何檢查這是目錄路徑還是任何文件名路徑?
- 28. imageUri:路徑本地文件
- 29. iPhone本地文件路徑
- 30. startDownloadingUbiquitousItemAtURL本地文件路徑?
哦,聰明地使用'net use%〜d1'加上'&&' - 比我通過'net use'結果循環更好! – ewall
有趣的解決方案。 +1 – 0xC0000022L