Variables 将CMD结果传递给批处理文件中的变量

Variables 将CMD结果传递给批处理文件中的变量,variables,scripting,batch-file,Variables,Scripting,Batch File,我正在尝试使用PSTools安装一个应用程序和一组服务,但我希望考虑到我尝试连接的计算机可能已关闭或位于不同的网络上,这是无法从内部网络访问的 基本上,如果无法通过管理共享访问机器,我将收到以下消息: 无法访问MachineName: 找不到网络路径。 确保在MachineName上启用了默认的admin$共享 这是我用来捕获“错误消息”并报告安装是否成功的语法(取决于它是否可以联系机器) 当前,它挂起在定义错误变量的位置。我不太明白我这里出了什么问题。'COMMAND^| FIND“canno

我正在尝试使用PSTools安装一个应用程序和一组服务,但我希望考虑到我尝试连接的计算机可能已关闭或位于不同的网络上,这是无法从内部网络访问的

基本上,如果无法通过管理共享访问机器,我将收到以下消息:

无法访问MachineName:
找不到网络路径。
确保在MachineName上启用了默认的admin$共享

这是我用来捕获“错误消息”并报告安装是否成功的语法(取决于它是否可以联系机器)

当前,它挂起在定义错误变量的位置。我不太明白我这里出了什么问题。

'COMMAND^| FIND“cannot access”
打开一个命令shell,这就是它挂起的原因。它将不会继续,直到该外壳退出

您需要查看如何将错误消息重定向到另一个文件2>Errors.txt将在下一行中为您提供一个要搜索的文件

这将使批处理文件看起来像这样:

@echo off
set /p name=What is the machine name?: 
psexec.exe \\\%name% ... \\\ServerName\installation.bat 1>Error.txt 2>&1 
for /f "tokens=*" %%A in ('FIND /i error.txt "Couldn't Access"') do SET Error=%%A
If not x%ERROR:Couldn=%==x%ERROR% (
ECHO Installation Failed.
) Else (
ECHO Installtion complete.  
)
Pause
exit
(另外,请注意使用括号表示多行IF)

检查if将查看
cand
是否是字符串的一部分,因为直接比较不起作用,因为您必须检查整个字符串,包括机器名

ok,它正在写入文件,但一旦它在(Error.txt)中点击
for/f“tokens=*”%%a,do SET Error=%%a,它就会关闭。这是我的全部代码:
:loop cls set/p name=机器名是什么?:psexec.exe\\%name%-u username-p password\\ServerName\path\file.bat 1>Error.txt 2>&1,用于/f“tokens=*”%A in(Error.txt)do set Error=%A如果%Error%==“句柄无效”。然后Echo安装失败。否则将导致安装成功。暂停转到循环
一旦设置了
%ERROR%
变量,您应该能够检查它,就像在示例批处理文件-编辑应答中,它将ERROR.txt的最后一行指定为变量:
连接到computername…
。如果error.txt.changed for/f中存在该设置,我希望它指定“句柄无效”的值,以便对该错误运行find命令。修复了比较(希望如此)假设您的test.txt是my error.txt,它仍然失败。它在变量赋值处关闭。
@echo off
set /p name=What is the machine name?: 
psexec.exe \\\%name% ... \\\ServerName\installation.bat 1>Error.txt 2>&1 
for /f "tokens=*" %%A in ('FIND /i error.txt "Couldn't Access"') do SET Error=%%A
If not x%ERROR:Couldn=%==x%ERROR% (
ECHO Installation Failed.
) Else (
ECHO Installtion complete.  
)
Pause
exit