奥基-dokey。你知道net view命令吗?我基本上希望将该列表中的每个pc分配给它自己的变量。例如,如果净视图的输出为:
Server Name Remark
-------------------------------------------------------------------------------
\\CARLY-PC
\\COLTON-WIN8
The command completed successfully.
我想要
%a%= CARLY-PC
%b%= COLTON-WIN8
列出了很多项目。
不幸的是我不知道该怎么做。我不理解FOR命令,因为我认为这是你必须使用的。
答案 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