Cmd net命令:net使用-如何仅获取字母表和路径名?

Cmd net命令:net使用-如何仅获取字母表和路径名?,cmd,path,Cmd,Path,当我在命令提示符下执行“网络使用”时,它将显示以下内容: New connections will be remembered. Status Local Remote Network ------------------------------------------------------------------------------- OK W: \\hfs2\ATS\Novell Prof

当我在命令提示符下执行“网络使用”时,它将显示以下内容:

New connections will be remembered.


Status       Local     Remote                    Network

-------------------------------------------------------------------------------
OK           W:        \\hfs2\ATS\Novell Profile Backup\wk\one\two\three\four\five\six\seven\eight\nine\ten\eleven\twelve\thirteen 
                                                Microsoft Windows Network
OK           X:        \\hfs2\ATS\Novell Profile Backup\wk\one\two\three\four\five\six\seven\eight\nine\ten 
                                                Microsoft Windows Network
OK           Y:        \\hfs2\ATS\Novell Profile Backup 
                                                Microsoft Windows Network
Unavailable  Z:        \\hfs2\ATS                Microsoft Windows Network
The command completed successfully.
如何仅提取驱动器字母表和路径名

W:        
\\hfs2\ATS\Novell Profile Backup\wk\one\two\three\four\five\six\seven\eight\nine\ten\eleven\twelve\thirteen

X:        
\\hfs2\ATS\Novell Profile Backup\wk\one\two\three\four\five\six\seven\eight\nine\ten

Y:        
\\hfs2\ATS\Novell Profile Backup

Z:        
\\hfs2\ATS
编辑

WMIC不需要管理员权限

它确实需要你尝试做的事情的权利。如果不是管理员,你就不能用它来做管理员的事情

它还需要管理员在系统上运行一次以进行设置

从帮助

用户帐户控制

在UAC下,本地管理员组中的帐户有两个访问令牌,一个具有标准用户权限,另一个具有管理员权限。由于UAC访问令牌筛选,脚本通常在标准用户令牌下运行,除非它以提升权限模式“管理员”身份运行。并非所有脚本都需要管理权限

脚本无法以编程方式确定它们是在标准用户安全令牌下运行还是在管理员令牌下运行。脚本可能会因访问被拒绝错误而失败。如果脚本需要管理员权限,则必须在提升模式下运行。根据脚本是否在提升模式下运行,对WMI命名空间的访问会有所不同。某些WMI操作(例如获取数据或执行大多数方法)不要求帐户以管理员身份运行。有关默认访问权限的更多信息,请参阅访问WMI命名空间和执行特权操作

Wmic 系统安装后首次运行Wmic时,必须从提升的命令提示符下运行。除非WMI操作需要管理员权限,否则Wmic的后续执行可能不需要提升模式

使用WMIC

wmic netuse get /format:list
给你可用的东西

使用类似

wmic netuse get remotepath, localname /format:list
将输出放入文件或剪贴板

WMIC专用开关


/output
/append

乙二醇

(/node是要针对其运行命令的计算机的IP地址和/或计算机名的列表,每行一个IP地址或计算机名)

常规命令提示文件重定向


向命令追加>filename.ext(或将>>filename.ext追加到文件)会将输出写入文件而不是屏幕

wmic baseboard get product,Manufacturer,model,partnumber>MotherboardPartNum.txt
常规命令提示管道


追加|命令将输出发送到命令而不是屏幕。输出发送到的有用命令包括

find or findstr (finds and filters text)

sort (sorts the output)

more (displays output to screen one page at a time)

clip (puts output onto the clipboard)

null (makes the data disappear for good - used for unwanted error messages)


wmic baseboard get product,Manufacturer,model,partnumber|clip
结合管道和重定向


所以我们可以把它们结合起来。以反向排序顺序(z到a)将列表发送到桌面上的文件,并删除空行

wmic service get name,displayname /format:list|findstr .|sort /r>"%userprofile%\desktop\services_reversed.txt"
WMIC输出选项


输出选项是

/Format:list (a list - use notepad to view)

/format:table (a table - use notepad to view)

/format:hform (an html list - name the file's extension .html so IE will show)

/format:htable (an html table - name the file's extension .html so IE will show)

/format:csv (comma seperated variable - used for importing data into other programs such as excel)
还有
value、mof、rawxml
xml

所以


net use的输出中存在一些问题

  • 状态
    字段可以保存信息或为空

  • 网络
    字段可以有多个值,具体取决于网络映射。就我而言,我有“Microsoft Windows网络”和“Netware服务”。因此,不存在直接替代

  • 网络
    字段可以与
    远程
    字段位于同一行,也可以位于下一行,并且由于
    远程
    字段可能包含空格,因此在列限制位置检查字符是不可靠的。有必要将检查延迟到读取下一行,以确定它是否包含远程数据

所以,没有一个班轮来处理它

@echo off
    setlocal enableextensions disabledelayedexpansion

    set "drive="
    for /f "skip=6 tokens=1,* delims=\" %%a in ('net use') do (
        if defined drive (
            setlocal enabledelayedexpansion
            if "%%b"=="" (
                echo !drive! !networkPath!
            ) else (
                echo !drive! !networkPath:~0,26!
            )
            endlocal
            set "drive="
        )
        if not "%%b"=="" for /f "tokens=2" %%c in ("x%%a") do (
            set "drive=%%c"
            set "networkPath=\\%%b"
        )
    )
%%a
循环将从
net use
读取行,并使用反斜杠作为分隔符拆分行。这将允许我们确定该行是否包含网络路径(如果没有第二个令牌,则该行不包含反斜杠)

由于我们将延迟一行中的信息输出,直到读取下一行(以确定远程路径是否在
网络
列中继续),因此
for
循环中的第一个操作是确定是否有来自上一个循环的挂起数据。如果有数据,我们将根据当前行的内容选择要输出的内容

回显数据后,如果当前行包含网络信息,则会将其保存以供以后输出

这是更快的解决方案,但有两种方案需要更少的代码:

多个
网络使用
命令

@echo off
    setlocal enableextensions disabledelayedexpansion

    rem For each line in the output of the net use that includes a drive letter
    for /f "delims=" %%a in ('net use^|find ":"') do (
        rem Retrieve the drive letter from the line
        for /f "tokens=2" %%b in ("x%%a") do (
            rem Run a net use with the drive letter and output the drive and the path
            for /f "tokens=1,* delims=\" %%c in ('net use %%b') do if not "%%d"=="" echo(%%b \\%%d
        )
    )
代码更少,但由于执行了多个
net use
命令,因此速度较慢

使用WMIC

@echo off
    setlocal enableextensions disabledelayedexpansion

    for /f "tokens=2,3 delims=," %%a in (
        'wmic netuse get LocalName^, RemoteName^, Status /format:csv ^| find ":"'
    ) do echo(%%a %%b

代码更少,但在这种情况下,需要管理员权限来运行命令

我可能会晚一点,但这对我有帮助

WMIC NETUSE GET LocalName, RemotePath /FORMAT:TABLE | FIND /i ":"
“dot-net命令”和.net标记似乎暗示您正在询问如何从.net语言(如C#或VB.net)执行此操作。对吗?
@echo off
    setlocal enableextensions disabledelayedexpansion

    for /f "tokens=2,3 delims=," %%a in (
        'wmic netuse get LocalName^, RemoteName^, Status /format:csv ^| find ":"'
    ) do echo(%%a %%b
WMIC NETUSE GET LocalName, RemotePath /FORMAT:TABLE | FIND /i ":"