将网络视图(批处理)输出到文本中然后对每台计算机执行操作

时间:2015-10-28 17:05:28

标签: batch-file

我一直试图通过搜索网络\\computername\c$\Program Files\Foo上的主机名来找到我公司软件在PC上的存在,如果找到它,请复制一下更新配置等。

我已经看到net view将所有PC都放在网络上,如下所示:

\\DISKSTATION
\\JWLAPTOP
\\TEST
\\XP
The command completed successfully.

我想知道是否有办法将计算机名称放在一个干净的清单中(没有"命令已完成"等等):

\\DISKSTATION
\\JWLAPTOP
\\TEST
\\XP

然后对hostnames.txt中的所有内容(如果存在)运行一些命令:

\\JWLAPTOP\c$\Program Files\Foo --> do copy xyz to wherever

我可以将部分\c$\Program Files\Foo作为一个变量来处理,以便在文本文件中的计算机名称之后添加。

希望有意义,感谢任何提示。 修改

一直在想这可能有更直接的方法来做到这一点......

我需要在客户网络上查看PC列表..... net view是获取此信息的好方法,但我还需要查看哪些是在线的。任何在线,查询文件夹并更新* .CFG文件,任何离线,输出到文本以供参考。

所以当下......

FOR /F "tokens=1 delims= " %%G IN ('net view ^|findstr /L /B /C:"\\"')

这很好用,然后我把它输出到一个文本文件..

FOR /F "tokens=1 delims= " %%G IN ('net view ^|findstr /L /B /C:"\\"') DO (echo %%G>>%~dp0netview.txt) 

然而,%% G回显了一些计算机,这意味着我正在努力争取一条新线......

for /f %%G in (%~dp0netview.txt) DO(ping等......

因为计算机名称之前的\而ping。所以我们想知道我们是否可以制作清单' just"在它之前没有\的PC名称。

这也是我需要编辑的.cfg文件的内容...

<?xml version="1.0" encoding="utf-8"?>
<ClientConfigurationFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ServerPath>**\\server\shared\data**</ServerPath>
  <ApplicationMode>Workstation</ApplicationMode>
  <VRPath />
  <ServicePollingInterval>0</ServicePollingInterval>
</ClientConfigurationFile>

也许有一种方法可以在找到它的存在后直接编辑它的某个部分。 \ server \ shared \ data ...以粗体显示我需要经常更新客户端有新的服务器和东西,并且需要绕过很多房间进行手动更新。这批产品可以节省数小时的不必要工作。

编写现有的.cfg文件仍然是一个很好的方法,如果它太棘手或不可能直接。

希望有意义,感谢回复!!!

2 个答案:

答案 0 :(得分:1)

假设您的计算机名称中没有空格。

@echo off
FOR /F "tokens=1 delims= " %%G IN ('net view ^|findstr /L /B /C:"\\"') DO (
    IF EXIST "%%~G\c$\Program Files\Foo" copy "C:\folder\xyz.txt" "C:\other folder\"
)

如果你想要剥离前导反斜杠,那么就像使用空格作为分隔符来消除所有无关的NET VIEW输出一样使用它作为分隔符。

@echo off
FOR /F "tokens=1 delims=\ " %%G IN ('net view ^|findstr /L /B /C:"\\"') DO (
    PING %%G
    IF EXIST "\\%%~G\c$\Program Files\Foo" copy "C:\folder\xyz.txt" "C:\other folder\"
)

答案 1 :(得分:0)

您可以执行以下操作:

@echo off
setlocal EnableExtensions
set "TARGET=C$\Program Files\Foo"
for /F "eol=| delims=" %%C in ('
    net view ^| find "\\"
') do (
    pushd "%%C\%TARGET%"
    if not ErrorLevel 1 (
        rem do your operations here...
        copy "\your\source\path\xyz" "."
        popd
    )
)
endlocal

for /F循环遍历net view返回的所有主机名(假设每个主机名都以\\开头且主机名)。<登记/> 由于生成的路径(例如\\TEST\C$\Program Files\Foo)是多个命令不支持的UNC路径,因此使用pushd,它能够通过建立临时驱动器号{{}}来连接到给定资源。 {1}},并立即将工作目录更改为其根目录(如果命令扩展名处于打开状态,则为Windows默认值)。
查询Z:用于跳过其余命令,以防由于某种原因if not ErrorLevel 1无法连接到资源。 完成所有操作后,pushd可确保卸载popd创建的临时驱动器,并恢复以前的工作目录。