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 に答える