system関数が正しく動かない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
blade

system関数が正しく動かない

#1

投稿記事 by blade » 12年前

system関数を使って外部コマンドを呼び出して実行プログラム(a.exe)内で別のプログラムを実行させたいと考えています。
カレントディレクトリ外にあるプログラム(betsu.exe)を実行したいのですが、その起動にはそのプログラムがあるディレクトリとは別のフォルダのいくつかのファイルを展開してから起動しなければなりません。
その数が多いのでプログラム内でコマンドcdでbetsu.exeのあるディレクトリに移動してbetsu.exeを実行したいと考えています。

コード:


#include <stdio.h>
#include<stdlib.h>
int main(void)
{
	system("cd C:/Users/blade/Desktop/betsu");
   system("cd"); //現在どこにいるか確認
   system("betsu.exe");
	return 0;
}
このプログラムを実行形式にして実行させてもbetsu.exeは実行されません。
むしろ、7行目のcdで現在位置を調べると上のcソースが置いてあるディレクトリにいることになっています。
当然次の行のbetsu.exeは実行されませんが、
どうして6行目のディレクトリ移動は正しく行かないのでしょうか。

・カレントディレクトリ(ここでa.exeを実行) C:\Users\blade\documents\visual studio 2010\Projects\0109\debug
・betsu.exeの場所 C:\Users\blade\Desktop\betsu
・上のcソースが置いてある場所 C:\Users\blade\documents\visual studio 2010\Projects\c\tekitoa

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: system関数が正しく動かない

#2

投稿記事 by h2so5 » 12年前

system関数でのコマンドの実行は独立しています。
つまり、system関数を呼び出すごとにカレントディレクトリはリセットされてしまうということです。

一番簡単な解決方法は & を使ってコマンドを連続で実行することです。

コード:

system("cd C:/Users/blade/Desktop/betsu & betsu.exe");
ちなみにWindowsでは & ですが UNIX環境では ; を使います。

参考URL:
system関数について | C・C++のQ&A【OKWave】
DOS equivalent for unix semi-colon to execute multiple commands

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: system関数が正しく動かない

#3

投稿記事 by ISLe » 12年前

コマンドプロンプト(cmd.exe)限定かもしれませんが、コマンドの連結には&&、||も使えます。
&&は前のコマンドがエラー終了すると次のコマンドを実行しません。
||は前のコマンドがエラー終了しても次のコマンドを実行します。

(追記)
||は前後のコマンドを並列に実行するようです。

blade

Re: system関数が正しく動かない

#4

投稿記事 by blade » 12年前

ありがとうございます。過去に同じ質問があったのですね、調査不足でした。
&でつないだらできました。

blade

Re: system関数が正しく動かない

#5

投稿記事 by blade » 12年前

ありがとうございます。
&&でつないだほうがエラーが起きた時に対応できるので便利なのですね。
補足までいろいろ教えていただきありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る