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

标签 variables scripting batch-file

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

基本上,如果无法通过管理共享访问计算机,这就是我收到的消息:

Couldn't access MachineName:
The network path was not found.
Make sure that the default admin$ share is enabled on MachineName.

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

@echo off
set /p name=What is the machine name?: 
psexec.exe \\%name% -u *useraccount* -p *password* \\ServerName\installation.bat
FOR /F "tokens=*" %%A IN ('COMMAND ^| FIND "Couldn't access"') DO SET Error=%%A
If "%Error%"=="Couldn't access" 
ECHO Installation Failed.
Else
ECHO Installtion complete.  
Pause
exit

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

最佳答案

'命令^| FIND "无法访问"' 打开一个命令 shell,这就是它挂起的原因。在退出该 shell 之前,它将不会继续。

您需要考虑将错误消息重定向到另一个文件。 psexec 行上的 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 将查看 Couldn 是否是字符串的一部分,因为直接比较不起作用,因为您必须检查包括计算机名称在内的整个字符串

关于variables - 将 CMD 结果传递给批处理文件中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12693503/

相关文章:

javascript - JavaScript 函数的类型

python - 字典内的字符串格式?

linux - 是否可以检测本地 IP 地址并将其作为变量存储在 linux 脚本中

javascript - OpenLayers3/GeoServer 的轮廓功能

windows - bat 文件运行后关闭 Windows 应用程序

powershell - 将带引号的参数从批处理文件传递给 `powershell start` - 按需 self 提升

windows - 我们如何在批处理文件中使用当前目录路径(%~dp0)和 'ren' 命令?

javascript - 如何更改 Javascript 中的类变量?

linux - "No Output"返回代码 Shell 脚本

ajax - ASP.NET MVC 中 MicrosoftAjax.js 的脚本全局化怎么样?