2

レジストリ値を見つけてその値をWindowsコマンドプロンプト画面に返し、それを.txtファイルに追加するスクリプトを書いています。レジストリで必要な値を見つけるためにどのコマンドを使用するかを知るために、マシンが32ビットか64ビットかをテストする必要があります。

私は以下に書いたものに沿った論理を探しています:

32ビットの場合(このコマンドを実行)else(このコマンドを実行)

このスクリプトが機能するために必要なテキストファイルやその他のものが必要ないことを望んでいます。以下は私がこれまでに持っているコードです。レジストリの場所がプライベートであるため、場所を構成された場所に変更しました。(注:このスクリプトが読み取るテキストファイルがあり、コンピューターとサーバーの名前を挿入します。これまでのところ、コードは機能しますが、2つのレジストリ検索コマンドを使用すると、32ビットマシンをチェックしたときに明らかに正しい結果が得られません。 64ビットレジストリロケーションの場合)

@echo off

Setlocal

::sets the ldt variable to the local date and time in yyyymmdd_hhmmss
for /f "skip=1" %%c in ('wmic os get LocalDateTime') do set ldt=%%c
set ldt=%ldt:~0,8%_%ldt:~8,6%


::searches for computer names in servers.txt and then calls server sub routine. Once it goes back to the for loop it moves onto the next line in servers.txt
for /f %%c in (servers.txt) do (
set server=%%c
call:server
)
pause
goto:eof

--------------------------------------------------------------------
:server
set stamp=%date% at %time%
set DateTime=%stamp%

::Tests for a good ping, if no ping then move onto next machine
ping -n 1 -w 250 %server% > nul 
if %errorlevel% NEQ 0 (
  ECHO No Ping on %server%
  ECHO No Ping on %server% >>AuditScript_%ldt%.txt
  goto:eof
)
call:screen
call:log
goto:eof

--------------------------------------------------------------------
:screen
echo.
echo Computer name: %server%
reg query "\\%server%\HKLM\SOFTWARE\Registry Folder1\Information\" /V "Datavalue" | FIND "Datavalue"
reg query "\\%server%\HKLM\SOFTWARE\Wow6432Node\Registry Folder1\Information" /V "Datavalue" | FIND "Datavalue"
echo.
goto:eof

--------------------------------------------------------------------
:log
echo. >>AuditScript_%ldt%.txt
echo Registry value for %server% on %stamp% >>AuditScript_%ldt%.txt
reg query "\\%server%\HKLM\SOFTWARE\Registry Folder1\Information\" /V "Datavalue" | FIND "Datavalue" >>AuditScript_%ldt%.txt
reg query "\\%server%\HKLM\SOFTWARE\Wow6432Node\Registry Folder1\Information" /V "Datavalue" | FIND "Datavalue" >>AuditScript_%ldt%.txt
echo. >>AuditScript_%ldt%.txt
goto:eof

--------------------------------------------------------------------
4

4 に答える 4

3

これを試して:

setlocal EnableDelayedExpansion

for /f "delims== tokens=2" %%a in ('wmic os get osarchitecture /value') do (
  set arch=%%a
)

if "%arch%"=="32-bit" (
  rem do some
) else (
  rem do other
)

endlocal
于 2012-09-11T20:25:46.243 に答える
3

cmdを介して、次の%PROCESSOR_ARCHITECTURE%ように変数を確認できます。

echo %PROCESSOR_ARCHITECTURE%これは出力されるx86x64、OSによって異なります

したがって、次の線に沿って何かを使用できます。

@echo off

if %PROCESSOR_ARCHITECTURE% == x86 (
goto :x86
) else (
goto :x64
)

:x86
start "foo.exe"
goto :eof

:x64
start "bar.exe"
goto :eof
于 2012-09-12T18:56:34.823 に答える
3
FOR /F "tokens=3" %%x in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /V PROCESSOR_ARCHITECTURE') do set CPU=%%x
echo CPU Architecture: %CPU%
if "%CPU:~-2%"=="64" (
  echo Do This
) else (
  echo Do That
)
于 2012-09-15T16:25:38.023 に答える
0
:: Installed OS
Set _Bitness=64
IF %PROCESSOR_ARCHITECTURE% == x86 (
  IF NOT DEFINED PROCESSOR_ARCHITEW6432 Set _Bitness=32
  )
Echo Operating System is %_Bitness% bit

私はそれがうまくいくと思います

于 2014-05-08T20:52:38.090 に答える