0

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

  1. 运行 psexec 执行“systeminfo”,找到字符串“System Type”

  2. 从 PsExec 输出中确定“系统类型”(是“基于 X86 的 PC”还是“基于 X64 的 PC”)。

  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 domain\username -p "password" systeminfo | findstr /c:"System Type" >> "%Logs%"

        if "%%i"=="System Type:               X86-based PC" (
        net use m: \\%%i\C$ /user:domain\username "password"
        xcopy "C:\batch_file\x86.txt" \\%%i\C$\_support\setup\ /y
        net use m: /delete
        ) else (
        net use m: \\%%i\C$ /user:domain\username "password"
        xcopy "C:\batch_file\x64.txt" \\%%i\C$\_support\setup\ /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 domain\username -p "password" systeminfo | findstr /c:"System Type" >> "%Logs%"

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

系统类型:基于 X86 的 PC 或系统类型:基于 X64 的 PC

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

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

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

它说

| was unexpected at this time

有人可以帮忙吗?

4

1 回答 1

2

%%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 domain\username -p "password" systeminfo ^| findstr /c:"System Type"') do (
    >> "%Logs%" echo %%A
    if "%%A"=="System Type:               X86-based PC" (
      net use m: \\%%i\C$ /user:domain\username "password"
      xcopy "C:\batch_file\x86.txt" \\%%i\C$\_support\setup\ /y
      net use m: /delete
    ) else (
      net use m: \\%%i\C$ /user:domain\username "password"
      xcopy "C:\batch_file\x64.txt" \\%%i\C$\_support\setup\ /y
      net use m: /delete
    )
  )
)
于 2012-10-01T15:09:30.130 回答