将净视图的输出设置为不同的变量批处理

时间:2014-05-26 02:38:45

标签: batch-file networking

奥基-dokey。你知道net view命令吗?我基本上希望将该列表中的每个pc分配给它自己的变量。例如,如果净视图的输出为:

Server Name            Remark
-------------------------------------------------------------------------------
\\CARLY-PC                                                                     
\\COLTON-WIN8                                                                  
The command completed successfully.

我想要

%a%= CARLY-PC

%b%= COLTON-WIN8

列出了很多项目。

不幸的是我不知道该怎么做。我不理解FOR命令,因为我认为这是你必须使用的。

1 个答案:

答案 0 :(得分:2)

FOR / F命令用于执行另一个命令并获取其输出。例如:

for /F %%a in ('net view') do echo %%a

执行“net view”并获取每行第一个以空格分隔的标记(默认值),因此输出为:

Server
-------------------------------------------------------------------------------
\\CARLY-PC                                                                     
\\COLTON-WIN8                                                                  
The

现在我们可以选择服务器名称,前两个字符是“\”。棘手的部分是为变量生成不同的字母,但我们可以用这些字母定义一个字符串,并选择一个带有索引变量的字符串:

@echo off
setlocal EnableDelayedExpansion

set vars=abcdefghijklmnopqrstuvwxyz

set i=0
for /F %%a in ('net view') do (
   set line=%%a
   if "!line:~0,2!" equ "\\" (
      for %%i in (!i!) do set !vars:~%%i,1!=!line:~2!
      set /A i+=1
   )
)

编辑作为回复评论的新解决方案

您需要将每个值存储在具有不同名称的变量中是不常见的,因为此方法强制编写不同的程序行以处理每个变量。一种更简单的方法是使用数组并通过索引选择所需的元素:

@echo off
color a
title Local IP address finder
:start
cls
setlocal EnableDelayedExpansion

set i=0
for /F %%a in ('net view') do (
   set line=%%a
   if "!line:~0,2!" equ "\\" (
      set /A i+=1
      echo [!i!]        !line:~2!
      set comp[!i!]=!line:~2!
   )
)

echo.
echo.
echo Choose a computer.
choice /c 12345678 >nul
set name=!comp[%errorlevel%]!

cls
for /f "tokens=1,2 delims=[]" %%A in ('ping -4 %name% ^| find "Pinging"') do set ipaddress=%%B
if "%name%"=="" goto start
echo The IP address of %name% is %ipaddress%
echo.
echo.
echo %ipaddress% | clip
echo. %ipaddress% copyied to clipboard.
echo.
echo Press any key.
pause >nul
goto start

您可以在此处阅读批处理文件中的阵列管理说明:Arrays, linked lists and other data structures in cmd.exe (batch) script

PS - 您的代码在此行中有错误,错过了+运算符:

      set /A i=1