根据 Windows 系统类型(x86 或 x64)将可执行文件(x86 或 x64)复制到远程计算机



我需要帮助才能通过批处理文件实现以下目标。这就是我要做的,

  1. 运行 psexec 以执行"系统信息"并找到字符串"系统类型"

  2. 从 PsExec 输出确定"系统类型"(无论是"基于 X86 的电脑"还是"基于 X64 的电脑")。

  3. 在我的 PC 上本地映射驱动器,并根据系统类型复制文件。

这是我的剧本!

@echo off
set logs="C:logs.txt"
for /f %%i in (C:pro_arch.txt) do (
    echo %%i >> %logs%
    PsExec.exe \%%i -u domainusername -p "password" systeminfo | findstr /c:"System Type" >> "%Logs%"
        if "%%i"=="System Type:               X86-based PC" (
        net use m: \%%iC$ /user:domainusername "password"
        xcopy "C:batch_filex86.txt" \%%iC$_supportsetup /y
        net use m: /delete
        ) else (
        net use m: \%%iC$ /user:domainusername "password"
        xcopy "C:batch_filex64.txt" \%%iC$_supportsetup /y
        net use m: /delete
        )
)

脚本运行良好,直到这部分

@echo off
set logs="C:logs.txt"
for /f %%i in (C:pro_arch.txt) do (
    echo %%i >> %logs%
    PsExec.exe \%%i -u domainusername -p "password" systeminfo | findstr /c:"System Type" >> "%Logs%"

并根据系统类型输出以下内容:

系统类型:基于 X86 的电脑或系统类型:基于 X64 的电脑

IF 语句执行时,问题就来了。它仅将 x64.txt 复制到远程计算机,而不考虑远程计算机的系统类型。

使用 psexec 输出的命令替换也不起作用,

for /f "tokens=*" %%a in '(PsExec.exe \IPaddress -u domainusername -p "password" systeminfo | findstr /c:"System Type")' do set myvar=%%a

它说

| was unexpected at this time

有人可以帮忙吗?

%

%i 包含计算机名称,而不是 PsExec 的结果,所以当然你的 IF 语句永远不会为真。

在 For/f do() 子句中使用时,必须引号或转义特殊字符(如 |)。我建议逃跑,^|

@echo off
set logs="C:logs.txt"
for /f %%i in (C:pro_arch.txt) do (
  echo %%i >> %logs%
  for /f "delims=" %%A in ('PsExec.exe \%%i -u domainusername -p "password" systeminfo ^| findstr /c:"System Type"') do (
    >> "%Logs%" echo %%A
    if "%%A"=="System Type:               X86-based PC" (
      net use m: \%%iC$ /user:domainusername "password"
      xcopy "C:batch_filex86.txt" \%%iC$_supportsetup /y
      net use m: /delete
    ) else (
      net use m: \%%iC$ /user:domainusername "password"
      xcopy "C:batch_filex64.txt" \%%iC$_supportsetup /y
      net use m: /delete
    )
  )
)

最新更新