我正在嘗試使用 powershell(或 cmd)打開一個目錄并選擇一個檔案(或一個目錄)。
/select explorer 命令似乎不適用于長檔案路徑:
explorer.exe /select,\\?\filepath
我嘗試了多種組合(引號中的整個檔案路徑,沒有\\?\前綴等)。似乎沒有任何效果。它只是打開默認的“這臺電腦”位置。
我知道在 powershell 中我可以使用:
ii filepath
但這并不能解決問題,因為該ii命令會打開目標檔案夾/檔案,而不是打開父檔案夾并選擇所述檔案夾/檔案。
我真的很感激你的幫助。
(注意:我正在通過 C# 腳本 .NET Framework 4.7.2 啟動 cmd/powershell。因此,如果有可能在沒有 cmd/powershell 的情況下在 C# 中執行此操作,我很樂意使用該解決方案)
uj5u.com熱心網友回復:
注意事項:
以下解決方案僅適用于啟用了短 (8.3) 檔案名的卷-默認情況下它們是,但可以通過
fsutil.exe實用程式的8dot3name子命令在系統范圍內或在每個卷的基礎上關閉該功能。- 要查詢給定卷的支持,請從提升的會話中運行以下命令,
C:例如:fsutil 8dot3name query C:
- 要查詢給定卷的支持,請從提升的會話中運行以下命令,
我不清楚上述內容與UNC路徑有何關系。此外,我認為,如果路徑嵌套很深,即使是路徑的簡短版本也可能超過 259 個字符的總路徑長度限制。
在檔案系統API級別,您可以將系統配置為默認支持長度超過 259 個字符的路徑,而不需要長路徑選擇加入前綴
\\?\。這可以通過組策略或注冊表來實作 -有關更多資訊,請參閱此答案。- 不幸的是,即使啟用了默認的長路徑支持,
explore.exe顯然也不支持長度超過 259 個字符的路徑。
- 不幸的是,即使啟用了默認的長路徑支持,
我認為喬納森給出了關鍵的指標:傳遞檔案路徑的短(8.3) 版本來解決explore.exe似乎不支持長度超過 259 個字符的路徑的問題。
# Create a sample file with a long path (longer than 259 chars.)
$longFilePath = (New-Item -Force ("\\?\$HOME\_tmp" 'x' * 250)).FullName
# Obtain the short (8.3) version of the long path.
# Note: Be sure to pass a FULL (absolute) path, which must be prefixed with '\\?\',
# unless default long-path support is enabled system-wide (see below).
$shortPathVersion =
(New-Object -ComObject Scripting.FileSystemObject).GetFile($longFilePath).ShortPath
# Pass the short version of the path to explorer.exe
explorer.exe /select,$shortPathVersion
Remove-Item -LiteralPath $longFilePath稍后運行以清理示例檔案。
筆記:
在Windows PowerShell 中- 除非在系統范圍內啟用默認的長路徑支持 - 您需要
\\?\對長路徑(長度超過259字符的路徑)使用前綴,如New-Item上面的呼叫所示。- 在PowerShell (Core) 7 中,不再需要此前綴 - 它內置了長路徑支持;事實上,從 PowerShell 7.2 開始,有一些錯誤會在特定情況下阻止其使用(如果您的代碼需要在兩個PowerShell 版本中運行,這是有問題的) - 請參閱GitHub 問題 #10805
除非啟用默認的長路徑支持,否則傳遞給的路徑也
(New-Object -ComObject Scripting.FileSystemObject).GetFile()需要\\?\前綴 - 甚至從 PowerShell (Core) 7 呼叫- 奇怪的是,回傳的路徑的簡短版本保留了這個前綴,但
explorer.exe似乎沒有問題。
- 奇怪的是,回傳的路徑的簡短版本保留了這個前綴,但
盡管
,通常是一個元字符在PowerShell中(陣列構造),當呼叫外部程式,例如explorer.exe,它并沒有起到這樣的,所以沒有嚴格的需要來傳遞引數作為"/select,$shortPathVersion"或/select`,$shortPathVersion
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/351192.html
