【发布时间】:2016-05-17 22:42:10
【问题描述】:
我有一个非常大的预先存在的批处理文件,我需要添加一些逻辑来运行正确的 EXE,具体取决于它是 x86 还是 x64 位机器。我不能使用 PowerShell,因为出于某种原因,它们在大多数机器上都将其伪禁用。
我想要做的是使用 PSEXEC 从远程获取系统变量 PROCESSOR_ARCHITECTURE,然后从输出中创建一个本地系统变量。
如果我从 Win10x64 CMD 提示符运行此命令:
C:\PsTools>c:\pstools\PSEXEC.exe \\TEST-Win7x86 cmd /c echo ^%PROCESSOR_ARCHITECTURE^%
我得到了正确的远程 x86 值,但不能用它做任何事情:
x86
cmd exited on TEST-Win7x86 with error code 0
.
我尝试测试 this method 以将输出转换为变量:
FOR /F "delims=" %i IN ('c:\pstools\PSEXEC.exe \\TEST-Win7x86 cmd /c echo ^%PROCESSOR_ARCHITECTURE^%') DO set proc=%i
我正在取回本地 AMD64 值:
cmd exited on TEST-Win7x86 with error code 0.
C:\PsTools>set proc=AMD64
.
有人发现我做错了吗?
谢谢!
-马特
【问题讨论】:
-
您是否知道在批处理文件中使用时必须将
for变量的%符号加倍?另外我认为您需要在for /F循环中编写^^%%PROCESSOR_ARCHITECTURE^^%%,以便将字符串^%PROCESSOR_ARCHITECTURE^%逐字传递... -
你也可以通过
psexec \\remotepc powershell "$env:processor_architecture"来避免百分号的歧义。或者您可以跳过psexec并使用远程WMI 查询。for /f %I in ('wmic /node:remotepc os get osarchitecture /value ^| find "="') do set "%I" -
我大部分时间都使用 PowerShell 方法,但在这种情况下,这些计算机有一些东西阻止 PowerShell 工作。我没想过使用 WMIC 来获取它。下次我会记住的,谢谢!
标签: batch-file cmd psexec