2016-09-27 194 views
-2

我想用psexec连接到远程机器,使用findstr解析文件并将所需记录保存到稍后使用的变量中。windows批处理文件:psexec和findstr

这里是C:\目录位置\ file.xml:

<Editable default="XXX07770004183" description="Station Id" name="MachineID.PSID" regex="^XXX[a-zA-Z0-9]{4}[0-9]{4}[a-zA-Z0-9]{3}$"/>  
<Editable default="17" description="Machine Number" name="MachineID.MachineID" regex="^[0-9]+$"/> 
<Editable default="32" description="Asset number" name="MachineID.AssetNumber" regex="^[0-9]+$"/> 
<Editable default="AAALLL74" description="Serial number" name="MachineID.SerialNumber" regex="^[a-zA-Z0-9]+$"/> 

如果我手动连接到远程计算机并运行以下FINDSTR,就会报上面的正确值:32

for /f tokens^=2^ delims^=^" %%a in ('findstr /C:"c:\dir here\file.xml') do set asset=%%a 
echo %asset% 

我想通过使用psexec连接到机器来将这两者连接在一起,请在c:\ dir here \ file.xml中查找并查找资产编号并将其保存到变量中。对于这个问题,我应该可以将c:\ dir中的任何字段保存在这里\ file.xml中。

我曾尝试:

@ECHO Off 
SETLOCAL EnableDelayedExpansion 
SET listT=list.txt 

    FOR /F %%A in ('TYPE "%listT%"') do (
    bin\psexec -u registeredused -p secret \\%%A -s cmd /c findstr /C:"MachineID.AssetNumber" "c:\dir here\file.xml" 

    for /f tokens^=2^ delims^=^" %%b in ('findstr /C:"MachineID.AssetNumber" "c:\dir here\file.xml"') do set asset=%%b 
    echo %asset% 
    ) 

结果:

>find.cmd 

PsExec v1.94 - Execute processes remotely 
Copyright (C) 2001-2008 Mark Russinovich 
Sysinternals - www.sysinternals.com 


cmd exited on 172.16.1.41 with error code 1. 
ECHO is off. 

因此,它可以映射一个驱动器,但基本上未能超出。

我很抱歉如此模糊。

+0

你为什么要调用'findstr'两次?它看起来像第二个'for'应该运行'psexec'命令,而不是'findstr'命令。 –

+0

你能展示那看起来像什么吗? –

+1

不确定任何人都可以帮助缺乏细节。你只显示你的批处理文件的一部分。我们不知道机器列表的格式是什么文件。您尝试从中获取信息的XML文件也一样。 – Squashman

回答

0

“不工作”是无用的描述。你会问这个问题DID是否工作?

SETLOCAL ENABLEDELAYEDEXPANSION 
FOR /F %%A in ('TYPE "%listT%"') do (
bin\psexec -u %USER_NAME% -p %PASSWORD% \\%%A -s cmd /c findstr /C:"MachineID.AssetNumber" "c:\dir here\file.xml" 
for /f tokens^=2^ delims^=^" %%b in ('findstr /C:"MachineID.AssetNumber" "c:\dir here\file.xml"') do set asset=%%b 
echo !asset! 
) 

但是由于你没有描述你打算做什么,这是一个猜测游戏,看它是否正确。

此代码应该file.xml设置asset最后 “MachineID.AssetNumber”。

elemnt %var%for开始执行之前的值var。要查看可能更改的值,请使用SETLOCAL ENABLEDELAYEDEXPANSION并使用!var!,如在成千上万的So项中所解释的,如果您搜索delayedexpansion

而在这种情况下,或许echo %%b而不是set asset...是你想要的 - 列出所有的条目。

...或不。 Insufficienct information ...

+0

上面编辑。希望能帮助到你。基本思想:通过psexec连接到计算机,findstr特定项目,保存到变量。 –