質問: Windows 10 ( for /f "tokens=15" %%f in ('ipconfig ^| findstr "IPv4"') do set strIP=%%f ) rem IPアドレスから「中分類(使用者、メーカー)」を取得 findstr "%strIP%," %IP_list_pass% for /f "tokens=1-6 delims=," %%i in ('findstr "%strIP%," %IP_list_pass%') do (set PC_user=%%m) rem 取得結果書込み用ファイルの保存先フォルダ名をセット set TMP_Folder=C:\work_log\クライアント更新ログ rem 取得結果書込み用ファイルの名称設定 set output_file=softwarelist_%PC_user%.log rem ファイルサイズが1M以上なら取得結果書込み用ファイルを削除 for %%F in (%TMP_Folder%\%output_file%) do if %%~zF GEQ 1000000 del %TMP_Folder%\%output_file% rem *****取得結果書込み用ファイル書込み 開始***** rem ヘッダ日時編集(空白文字を「0」に置換) set time2=%time: =0% rem 取得結果書込み用ファイルの作成とヘッダ日時記述 echo *****%date% %time2:~0,2%%time2:~3,2%%time2:~6,2% start***** >>%TMP_Folder%\%output_file% rem *****32bitか64bitか判断して処理 開始***** rem 遅延環境変数の展開を有効 setlocal enabledelayedexpansion if "%PROCESSOR_ARCHITECTURE%" EQU "x86" ( echo "x86" rem レジストリからソフト一覧取得1 set RK="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" set FK="DisplayName DisplayVersion CurrentVersion" for /f "tokens=1,2,*" %%i in ('reg query %RK% /s ^| findstr %FK%') do ( set SS=%%i if "!SS:~0,18!"=="HKEY_LOCAL_MACHINE" ( if not "!SN!"=="" (echo !SN!@!SV!) set SN= set SV= ) if "!SS!"=="DisplayName" (set SN=%%k) if "!SS!"=="DisplayVersion" (set SV=%%k) ) if not "!SN!"=="" (echo !SN!@!SV! >>%TMP_Folder%\%output_file%) rem レジストリからソフト一覧取得2 set RK="HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall" set FK="DisplayName DisplayVersion CurrentVersion" for /f "tokens=1,2,*" %%i in ('reg query %RK% /s ^| findstr %FK%') do ( set SS=%%i if "!SS:~0,18!"=="HKEY_LOCAL_MACHINE" ( if not "!SN!"=="" (echo !SN!@!SV!) set SN= set SV= ) if "!SS!"=="DisplayName" (set SN=%%k) if "!SS!"=="DisplayVersion" (set SV=%%k) ) if not "!SN!"=="" (echo !SN!@!SV! >>%TMP_Folder%\%output_file%) ) if "%PROCESSOR_ARCHITECTURE%" NEQ "x86" ( echo "x64" rem レジストリからソフト一覧取得1 set RK="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" set FK="DisplayName DisplayVersion CurrentVersion" for /f "tokens=1,2,*" %%i in ('reg query %RK% /s ^| findstr %FK%') do ( set SS=%%i if "!SS:~0,18!"=="HKEY_LOCAL_MACHINE" ( if not "!SN!"=="" (echo !SN!@!SV!) set SN= set SV= ) if "!SS!"=="DisplayName" (set SN=%%k) if "!SS!"=="DisplayVersion" (set SV=%%k) ) if not "!SN!"=="" (echo !SN!@!SV! >>%TMP_Folder%\%output_file%) rem レジストリからソフト一覧取得2 set RK="HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall" set FK="DisplayName DisplayVersion CurrentVersion" for /f "tokens=1,2,*" %%i in ('reg query %RK% /s ^| findstr %FK%') do ( set SS=%%i if "!SS:~0,18!"=="HKEY_LOCAL_MACHINE" ( if not "!SN!"=="" (echo !SN!@!SV!) set SN= set SV= ) if "!SS!"=="DisplayName" (set SN=%%k) if "!SS!"=="DisplayVersion" (set SV=%%k) ) if not "!SN!"=="" (echo !SN!@!SV! >>%TMP_Folder%\%output_file%) rem 64bitOS専用ソフト一覧取得 set RK="HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" set FK="DisplayName DisplayVersion CurrentVersion" for /f "tokens=1,2,*" %%i in ('reg query %RK% /s ^| findstr %FK%') do ( set SS=%%i if "!SS:~0,18!"=="HKEY_LOCAL_MACHINE" ( if not "!SN!"=="" (echo !SN!@!SV!) set SN= set SV= ) if "!SS!"=="DisplayName" (set SN=%%k) if "!SS!"=="DisplayVersion" (set SV=%%k) ) if not "!SN!"=="" (echo !SN!@!SV!) pause rem if not "!SN!"=="" (echo !SN!@!SV! >>%TMP_Folder%\%output_file%) ) rem *****32bitか64bitか判断して処理 終了***** rem ヘッダ日時記述 echo *****%date% %time2:~0,2%%time2:~3,2%%time2:~6,2% end***** >>%TMP_Folder%\%output_file% rem *****取得結果書込み用ファイル書込み 終了***** exit ``` ### 試したこと 課題に対してアプローチしたことを記載してください ### 補足情報(言語/FW/ツール等のバージョンなど) より詳細な情報
回答: `if`の`( )`の中で、`RK`や`FK`をセットしていますので、`%RK%`や`%FK%`でなく、`!RK!`や`!FK!`で参照してください。`%RK%`や`%FK%`だと、空になり、`reg query /s`というコマンドになり当然エラーです。 あと、 `if "%os_ver%" == Windows 7 (`もおかしいです。これだと、「`"%os_ver%"`が`Windows`に等しい場合、`7`というコマンドを実行しろ」という意味になります。 `if "%os_ver%" == "Windows 7" (`が正しいと思われます。 全般的に、これだけ長いスクリプトを書くだけの基礎知識に欠けていると思います。意味もわからずコピペを重ねた印象です。