2014-10-28 40 views
0

當我做我的命令提示符「淨使用」,它會顯示以下內容:dot net命令:net use - 如何獲取Alphabet和路徑名?

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 

回答

1

編輯

WMIC不需要管理員權限

它需要你正在嘗試做的權利。如果不是管理員,你不能用它來做管理事情。

它還需要管理員在系統上運行一次以設置它。

從幫助

用戶帳戶控制

在UAC,佔本地Administrators組中有兩個訪問令牌,一個標準用戶權限和一個具有管理員權限。由於UAC訪問令牌過濾,通常在標準用戶令牌下運行腳本,除非它以提升特權模式「以管理員身份」運行。並非所有腳本都需要管理權限。

腳本無法以編程方式確定它們是在標準用戶安全令牌或管理員令牌下運行。該腳本可能會因拒絕訪問錯誤而失敗。如果腳本需要管理員權限,那麼它必須以提升模式運行。根據腳本是否在提升模式下運行,對WMI名稱空間的訪問會有所不同。一些WMI操作(如獲取數據或執行大多數方法)不要求帳戶以管理員身份運行。有關默認訪問權限的更多信息,請參閱訪問WMI命名空間和執行特權操作。

Wmic 在系統安裝後第一次運行Wmic時,它必須從提升的命令提示符運行。除非WMI操作需要管理員權限,否則隨後執行Wmic可能不需要提升模式。

使用WMIC

wmic netuse get /format:list 

給你什麼是可用的。

使用類似

wmic netuse get remotepath, localname /format:list 

使輸出的文件或剪貼板上。

WMIC特定開關


/output/append

例如

wmic /node:"@%userprofile%\desktop\ComputerName.txt" /output:"%userprofile%\desktop\EventLog.html" /failfast:on PATH Win32_NTLogEvent where (EventIDentifier=42 or eventidentifier=1003) get /format:hform 

(/節點是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

所以,

sort /? 

find /? 

findstr /? 

more /? 

clip /? 
0

有在net use

  • Status場輸出的一些問題可以保存信息或者是空的。

  • Network字段可以有多個取決於網絡映射的值。在我的情況下,我有「Microsoft Windows網絡」和「Netware服務」。所以,沒有直接替代。

  • Network字段可以是在同一行中,所述Remote字段,或者可以是對下一行,並且隨着Remote字段可以包括空格,檢查在塔極限位置的字符是不可靠的。有必要延遲檢查,直到下一行被檢查以確定它是否包含遠程數據。

所以,不是一個襯墊來處理它

@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線,並使用一個反斜槓作爲分隔符分割。這將允許我們確定該行是否包含網絡路徑(如果沒有第二個標記,則該行不包含反斜槓)。由於我們在一行中延遲信息的輸出,直到下一個被搜索(以確定遠程路徑是否在Network列中繼續),for循環內的第一個操作是確定是否有數據未決來自之前的循環。如果有數據,根據當前行的內容,我們選擇要輸出的內容。

一旦數據被回顯,如果當前行包含網絡信息,它將被保存以供以後輸出。

這是更快的解決方案,但是存在需要更少的代碼兩種選擇:

多個net use命令

@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 

代碼較少,但在這種情況下,需要管理員權限才能運行命令