13

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

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

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

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

4

6 に答える 6

25

これを行う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."
于 2013-02-25T04:57:36.427 に答える
18

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

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

Jasperの場所を他の方法(レジストリ?インストールされているプログラム設定?)で検索できない場合は、両方の場所を検索して、目的のディレクトリが見つかった場所を取得することをお勧めします。

編集 Sawnsisタグ-インストーラーを作成していますか?その場合、定数$ProgramFilesが役立つ場合があります。

于 2012-04-09T09:36:24.613 に答える
3

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が提供するフルパスを使用することをお勧めします...

于 2012-04-09T09:57:51.450 に答える
1

のような単純なものはどうですか、

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)

私はこのようにスクリプトを設定していて、両方のシステムで完全に機能します。

ダブルスペースで申し訳ありませんが、フォーマットを正しく保ちたくありませんでした。

于 2014-09-23T09:10:50.377 に答える
1

これが私がそれをする方法です:

GOTO %PROCESSOR_ARCHITECTURE%

:AMD64
<64Bit code>
EXIT

:X86
<32bit code>
EXIT
于 2015-05-13T19:44:09.657 に答える
0

@RenniePetの答えは良いようです。別の方法として、これが私が行った方法です。ここでの回答、主に@Samuelの回答から、効率が高すぎず、まとめられていません。このソリューションでは、ディレクトリ構造のみが信頼されています。参照環境変数はありません。

@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
于 2015-06-28T03:46:29.513 に答える