web-dev-qa-db-ja.com

Program FilesとProgram Files(x86)の両方で機能するバッチファイルを作成する方法

インストールされているJasperサーバーのパスに.sqlファイルを自動的にコピーするバッチファイルを作成しました(任意のソフトウェアインストールディレクトリを使用できます)。

これは私のバッチスクリプトです。

C:\ PROGRA〜2\JASPER〜1.0\mysql\bin\mysql.exe -u root -proot <create_database.sql

これは、jasperがProgram Files(x86)にインストールされている場合に機能します。プログラムファイルとプログラムファイル(x86)の両方に対して一般化するにはどうすればよいですか。

13
Sharad

このようなものを検索するために環境変数を使用したいとします。 32ビットWindowsでは、_%ProgramFiles%_があなたの友達です。

64ビットWindowsでは、アプリケーションは_%ProgramFiles%_と%ProgramFiles(x86)%の両方にインストールできるため、少し複雑になります。

Jasperの場所を他の方法(レジストリ?インストールされているプログラムの設定?)で検索できない場合は、両方の場所を調べて、予想されるディレクトリが見つかる場所を探すのが最善の策です。

Editnsisタグを見ました-インストーラーを作成していますか?その場合、定数 $ ProgramFiles が役立ちます。

18
Anders Lindahl

これを行う1つの方法を以下に示します。このソースからコピーしました: http://social.msdn.Microsoft.com/Forums/zh/winforms/thread/69dc2aac-9956-40a0-9826-da48b9003a8e

SET ProgFiles86Root=%ProgramFiles(x86)%
IF NOT "%ProgFiles86Root%"=="" GOTO win64
SET ProgFiles86Root=%ProgramFiles%
:win64

"%ProgFiles86Root%\name of program" "arguments, etc."
25
RenniePet

NSISでは通常、x64が存在しないふりをして$programfiles

バッチファイル; %ProgramFiles(x86)% が定義されている場合、64ビットシステムを使用しており、%ProgramFiles(x86)%が32ビットフォルダーで、%ProgramFiles%が64ビットフォルダーであると想定できます。 。また、PROCESSOR_ *を確認することもできます。 PROCESSOR_ARCHITEW6432 は、64ビットシステムで実行されている32ビットバッチファイルに対して定義されています。 PROCESSOR_ARCHITECTUREは、x86-64/AMD64ビットバッチファイルのAMD64です(PROCESSOR_ARCHITECTUREはx86やAMD64だけではなく、IA64もあり、NT4にはさらに多くの値があります)。

変数はユーザーが変更できるか、まったく存在しない可能性があることにも注意してください。NSISでバッチを生成する場合は、NSISが提供するフルパスを使用する方が良いでしょう...

3
Anders

簡単なものはどうですか

if exist "C:\Program Files (x86)" goto 64bit

goto 32bit

:32bit

(whatever u want to happen for the 32bit system)

:64bit

(whatever u want to happen for the 64bit system)

このように設定されたスクリプトがあり、両方のシステムで完全に動作します。

ダブルスペーシングで申し訳ありませんが、正しい形式を維持したくありませんでした。

1
JayF_ITAnalyst

ここに私がそれをする方法があります:

GOTO %PROCESSOR_ARCHITECTURE%

:AMD64
<64Bit code>
EXIT

:X86
<32bit code>
EXIT
0
Adam

@RenniePetの回答が良いようです。ここでの代替案は、私がやった方法です。あまり効率的ではなく、主に@Samuelの回答からの回答 here からまとめられたものはありません。このソリューションでは、ディレクトリ構造のみに依存しています。参照環境変数はありません。

@echo off
dir "C:\Program Files (x86)\\." > NUL 2>&1
if errorlevel 0 (
    set PROGRAMS_HOME="C:\Program Files (x86)"
    GOTO HomeSet
)
dir "C:\Program Files\\." > NUL 2>&1
if errorlevel 0 (
    set PROGRAMS_HOME="C:\Program Files"
    GOTO HomeSet
)   
GOTO NotWindows
:HomeSet
set PROGRAMS_HOME=%PROGRAMS_HOME:"=%
echo PROGRAMS_HOME set to *%PROGRAMS_HOME%*
:NotWindows
0
Chris Murphy