Batch file WMIC查询在Windows 10中导出局域网上的绝对共享路径

Batch file WMIC查询在Windows 10中导出局域网上的绝对共享路径,batch-file,cmd,wmic,Batch File,Cmd,Wmic,我正在尝试使用WMIC或类似的网络工具从LAN上PC驱动器上的文件夹的网络路径导出绝对或完整的本地路径。测试时,该站点上用于类似任务的一些线程在Win10中无法提供有效的解决方案 例如,在Win 10 Cmd中运行建议的一个答案查询时,我得到: C:\WINDOWS\system32>wmic share where "name='\\Laptop\Data'" get path Node - OFFICE ERROR: Description = Invalid query C:\WI

我正在尝试使用WMIC或类似的网络工具从LAN上PC驱动器上的文件夹的网络路径导出绝对或完整的本地路径。测试时,该站点上用于类似任务的一些线程在Win10中无法提供有效的解决方案

例如,在Win 10 Cmd中运行建议的一个答案查询时,我得到:

C:\WINDOWS\system32>wmic share where "name='\\Laptop\Data'" get path
Node - OFFICE
ERROR:
Description = Invalid query

C:\WINDOWS\system32>wmic share where "name='Data'" get path
No Instance(s) Available.
我需要这个结果:K:\Data,其中K:\是局域网上远程PC的硬盘驱动器,数据是该驱动器上的共享文件夹

有人能为该任务建议一个工作查询和批处理吗?WMIC文档太过广泛,在没有使用该工具的丰富经验的情况下,无法通过试错推导出工作查询

wmic share where name='C$' get path
在这里工作(因为只有一个测试不需要双引号)。我也是

您发布的内容表明您没有名为
data
的共享

wmic share get /format:list
向你展示你所拥有的

C:\Users\User>wmic share get
AccessMask  AllowMaximum  Caption        Description    InstallDate  MaximumAllowed  Name    Path        Status  Type
            TRUE          Remote Admin   Remote Admin                                ADMIN$  C:\Windows  OK      2147483648
            TRUE          Default share  Default share                               C$      C:\         OK      2147483648
            TRUE          Default share  Default share                               D$      D:\         OK      2147483648
            TRUE          fred                                                       fred    C:\Intel    OK      0
            TRUE          Default share  Default share                               G$      G:\         OK      2147483648
            TRUE          Remote IPC     Remote IPC                                  IPC$                OK      2147483651
            TRUE          TestC                                                      TestC   C:\         OK      0
像往常一样
wmic/?
wmic共享/?
wmic共享调用/?
wmic共享获取/?
wmic/format/?

wmic /node:127.0.0.1 share get
对于远程计算机,您必须连接到该计算机(请参阅
wmic/node/?


以下列出了映射到本地计算机上的(当前连接的)远程共享的驱动器号

C:\etc>for /f "tokens=1-3" %x in ('net use') do @if /i "%x" equ "ok" echo %z = %y

\\laptop\x$ = P:
\\laptop\data = Q:

在操作编辑之后(突出显示我的):
[+编辑以了解正确的
净共享
用法]

我需要这个结果:K:\Data,其中K:\是局域网上远程PC的硬盘驱动器,数据是该驱动器上的共享文件夹

如果需要将
K:
驱动器号分配到远程计算机上包含共享目录的驱动器,则可以使用或类似工具远程运行
net share
(前提是您在远程计算机上拥有足够权限的帐户)

例如,假设
\\laptop
是局域网上的另一台机器,下面将列出
\\laptop
上的共享名和(远程)目录

C:\etc>for /f "tokens=1,2" %u in ('psexec \\laptop cmd /c net share 2^>nul') do @(
         for /f "tokens=1,2 delims=:" %x in ("%u %v") do @(
           if not "%y"=="" echo "\\laptop\%u" = "%v" ) )

"\\laptop\C$" = "C:\"
"\\laptop\ADMIN$" = "C:\Windows"
"\\laptop\DATA" = "K:\Data"

线程技术中建议使用某些附加操作

使用WMIC时,我必须使用本地管理员帐户来控制WMI安全属性。此外,尽管防火墙已禁用,但通过运行GPEDIT.msc“允许入站远程管理例外”防火墙规则。正确的查询如下所示,处理其输出需要一个与PsExec batch类似的批处理文件:

wmic /user:[username] /password:[password] /node:"PC-ID" share get

@echo off
setlocal EnableExtensions EnableDelayedExpansion
for /f "tokens=1,2 skip=1 delims=:" %%u in ('wmic /user:[username] /password:[password] /node:"Laptop" share get') do @(
    set "var1=%%u" & set "var2=%%v"
    set "var1.1=!var1:~89,-1!" & set "var2=!var2:~0,33!" & set "var1.2=!var1:~97!" & set "var1.3=!var1.1:~0,4!"
    if not "!var1.3!"=="IPC$" if not "!var1.1!"=="" echo \\Laptop\!var1.1! = !var1.2!:!var2!) 
exit /b

::Output
\\Laptop\ADMIN$   = C:\WINDOWS
\\Laptop\C$       = C:\
\\Laptop\D$       = D:\
\\Laptop\Data     = K:\
\\Laptop\K$       = K:\
\\Laptop\Docs     = K:\Other\Docs
\\Laptop\print$   = C:\windows\system32\spool\drivers
当使用PsExec而不是WMIC时,我必须首先使用它,然后在注册表中使用一个额外的键LocalAccountTokenFilterPolicy,然后修改前面发布的命令:

@echo off
for /f "tokens=1,2" %%u in ('psexec64 -u [username] -p [password] \\Laptop cmd /c net share 2^>nul') do @(
    for /f "tokens=1,2 delims=:" %%x in ("%%u %%v") do @(
        if not "%%y"=="" echo \\Laptop\%%u = %%v ) )
exit /b

::Output
\\Laptop\C$ = C:\
\\Laptop\D$ = D:\
\\Laptop\print$ = C:\windows\system32\spool\drivers
\\Laptop\K$ = K:\
\\Laptop\ADMIN$ = C:\WINDOWS
\\Laptop\Data = K:\
\\Laptop\Docs = K:\Other\Docs

如果
\\laptop\data
不是绝对路径,请定义
绝对路径的含义。在这种情况下,绝对路径是K:\data,其中K:\是安装在远程PC上的硬盘驱动器卷的驱动器号。您应该将其编辑成问题(因为它通常具有不同的含义).那么您想要共享的路径,就好像您在询问远程计算机一样?是的,我需要局域网上共享的完整路径。术语“绝对路径”在几个线程中用于类似的任务,但我可以编辑这个问题。您的解决方案在这里不适用于网络路径,只适用于本地路径。请注意,我已经有一个已知的网络路径。这是您的查询。所以它确实有效。共享是计算机与其他计算机共享的内容。您的解决方案只列出它运行的计算机的本地共享,而不列出LAN上其他计算机的共享。至少对我来说是这样添加LAN PC名称的正确方法是什么
C:\WINDOWS\system32>wmic/node:Laptop share获取无效的全局开关。
如果您的计算机名为
Laptop
,它应该可以工作。键入
net view
查看已打开的计算机。我没有将本地计算机上的任何驱动器号映射到网络共享,因为它们是动态装载的,可以在Win Explorer中访问,而无需驱动器号。我需要远程完整路径,它们已经有了。此外,我得到的信息是:
C:\WINDOWS\system32>net使用新连接将被记住。列表中没有条目。
尽管网络共享已安装在本地PC上,但仍存在此问题。我使用Admin Cmd提示符。@sambul35作为答案的第二部分,对于共享的远程路径,您需要在远程计算机上运行
net use
。如果您详细说明最终目标可能会有所帮助,因为远程计算机上基于驱动器号的路径在大多数常见情况下都不太有用。令人惊讶的是,我在第二台PC上获得了完全相同的输出,尽管共享安装在两台PC上。Win 10是最新的。目标是开发一种工具,根据网络路径列表在LAN上创建绝对路径列表。实际上,您需要在远程机器上运行
net share
,而不是
net use
。我在回答中作了必要的更正。
@echo off
for /f "tokens=1,2" %%u in ('psexec64 -u [username] -p [password] \\Laptop cmd /c net share 2^>nul') do @(
    for /f "tokens=1,2 delims=:" %%x in ("%%u %%v") do @(
        if not "%%y"=="" echo \\Laptop\%%u = %%v ) )
exit /b

::Output
\\Laptop\C$ = C:\
\\Laptop\D$ = D:\
\\Laptop\print$ = C:\windows\system32\spool\drivers
\\Laptop\K$ = K:\
\\Laptop\ADMIN$ = C:\WINDOWS
\\Laptop\Data = K:\
\\Laptop\Docs = K:\Other\Docs