gpt4 book ai didi

winapi - 将 Windows 驱动器号解析为路径(subst 和 network)

转载 作者:行者123 更新时间:2023-12-04 14:36:59 30 4
gpt4 key购买 nike

我想知道是否有一种通用的方法可以使用驱动器号(例如 X:\foo\bar.txt )将路径解析为其等效的 UNC 路径,这可能是以下之一:

  • X:\foo\bar.txt如果 X:是真正的驱动器(即硬盘、U 盘等)
  • \\server\share\foo\bar.txt如果 X:是安装在 \\server\share 上的网络驱动器
  • C:\xyz\foo\bar.txt如果 X:SUBST 的结果命令映射 X:C:\xyz

  • 我知道有部分解决方案可以:
  • 解析网络驱动器(例如参见 question 556649,它依赖于 WNetGetUniversalName)
  • 解决SUBST驱动器号(请参阅 QueryDosDevice,它按预期工作,但不会返回诸如本地驱动器或网络驱动器之类的东西的 UNC 路径)。

  • 我是否缺少在 Win32 中实现此驱动器号解析的一些简单方法?或者我真的必须同时处理这两个 WNetGetUniversalNameQueryDosDevice得到我需要的东西?

    最佳答案

    这是将驱动器号转换为 UNC 路径或反向子路径的批处理。但不能保证它有效。

    使用示例:script.cmd echo Z: Y: W:

    @echo off
    :: u is a variable containing all arguments of the current command line
    set u=%*

    :: enabledelayedexpansion: exclamation marks behave like percentage signs and enable
    :: setting variables inside a loop
    setlocal enabledelayedexpansion

    :: parsing result of command subst
    :: format: I: => C:\foo\bar
    :: variable %G will contain I: and variable H will contain C:\foo\bar
    for /f "tokens=1* delims==> " %%G IN ('subst') do (
    set drive=%%G
    :: removing extra space
    set drive=!drive:~0,2!
    :: expanding H to a short path in order not to break the resulting command line
    set subst=%%~sfH
    :: replacing command line.
    call set u=%%u:!drive!=!subst!%%
    )

    :: parsing result of command net use | findstr \\ ; this command is not easily tokenized because not always well-formatted
    :: testing whether token 2 is a drive letter or a network path.
    for /f "tokens=1,2,3 delims= " %%G IN ('net use ^| findstr \\') do (
    set tok2=%%H
    if "!tok2:~0,2!" == "\\" (
    set drive=%%G
    set subst=%%H
    ) else (
    set drive=%%H
    set subst=%%I
    )
    :: replacing command line.
    call set u=%%u:!drive!=!subst!%%
    )

    call !u!

    关于winapi - 将 Windows 驱动器号解析为路径(subst 和 network),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1299814/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com