1

アプリケーションと実行可能ファイルがあります。アプリケーションで実行可能ファイルを実行したい。

実行可能ファイルは、たとえば「c:\sample」というフォルダにあります。

このディレクトリには、exe を呼び出すバッチ ファイルがあります。お気に入り:

start a1.exe
start a2.exe
start a3.exe

名前を startAll.bat としましょう

そして、すべてのexeにa1.dat a2.dat ...のようなデータがあり、これらのデータファイルがこのexeの近くにあるとします。

アプリケーションでこのバッチ ファイルを呼び出したい。

system("c:\\\\sample\\\\startAll.bat");

そのように呼び出すと、コマンドはこれらのexeを見つけることができません。

バッチファイルにディレクトリ名を追加すると、その時点でデータが見つかりません。作業ディレクトリが原因だと思います。

start c:\sample\a3.exe

このバッチ ファイルを呼び出す前に作業ディレクトリを変更するにはどうすればよいですか?

または他に何か提案はありますか?

4

4 に答える 4

7

電話chdir("C:\\sample")する前に電話するsystem(...)

またはcd、バッチファイルにコマンドを入れます

編集

C を使用していないため、バッチ スクリプトの最初の行は次のようになります。

C:
cd \sample

EDIT2

Johannes と MattH による提案を使用すると、BAT ファイルのはるかに優れたバージョンは次のようなものから始まります。

setlocal
set BATDIR=%~dp0
cd /d %BATDIR%

これで、ハードコードされたパスがないため、bat ファイルはディレクトリに関係なく機能します。SETLOCAL は、スクリプトの実行による副作用 (ディレクトリの変更や環境変数の設定など) を回避するために使用されます。

于 2009-09-03T11:49:34.620 に答える
7

このsystem関数は、次のように複数のコマンドを取ることができます。

system("C: && cd \\sample && startAll.bat");

これは、呼び出しプロセスの現在の作業ディレクトリを変更するよりも優れています。これには、望ましくない副作用がある可能性があるためです。

これらのファイルの設定方法によっては、コマンドをバッチ ファイルにハードコーディングするよりも簡単な場合があります。cd

編集:次のようなCプログラムでこれをテストしました:

#include "stdafx.h"
#include <stdlib.h>

int _tmain(int argc, _TCHAR* argv[])
{
    system("C: && cd \\temp && test.bat");
    return 0;
}

そして、次のように呼び出されるバッチ ファイルC:\temp\test.bat:

echo "Hello world" > pog

その C プログラムを (c:\temp とは別のディレクトリで) 実行するとpogC:\temp.

于 2009-09-03T11:55:39.350 に答える
4

バッチ ファイルからの相対パスのみを操作する場合は、バッチ ファイルで呼び出し元の作業ディレクトリを無視することを好むことがよくあります。これは、ファイルの先頭で次のように行うことができます。

SET BATDIR=%~dp0
CD %BATDIR%

または、外部ファイルを呼び出すときに %BATDIR% を実行できます。

上記の仕組みを理解するには、こちらをご覧ください

于 2009-09-03T12:46:30.393 に答える
0

ダブルスラッシュで試してください


system("c:\\sample\\startAll.bat");
于 2009-09-03T11:43:37.287 に答える