• ベストアンサー

バッチファイルの書き方

Linux上で実行するバッチファイルを作っています。 runというファイル名で、中には、  sudo ./GUItask とだけ書かれている、GUItaskというアプリケーションを実行するバッチファイルです。 (./runとコンソール上で打って使うつもりです) ここで、 アプリケーションが起動した時間と終了した時間を記録したいので、  /bin/date >> log  echo "起動" >> log  sudo ./GUItask  /bin/date >> log  echo "終了" >> log と書きました。 これで、logというファイルに、  2009年2月3日火曜日12:12:43 JST  起動  2009年2月3日火曜日12:15:43 JST  終了 などと書かれるようになりました。 これを、  2009年2月3日火曜日12:12:43 JST 起動  2009年2月3日火曜日12:15:43 JST 終了 のように、文字列を同じ行に書きたいのですが、 どのように記述したらよいでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

echo "`/bin/date` 起動" >> log とか?

rem_1982
質問者

お礼

申し訳ありません、私のタイプミスでした。 回答番号No.2の方のご指摘どおり、 ' と ` を混同しておりました。 挙げて頂いた記述で正常に動作しました。 ありがとうございました。

rem_1982
質問者

補足

回答ありがとうございます。 バッチファイルに echo "`/bin/date` 起動" >> log を書き込んだとこと、 logファイルには、  `/bin/date` 起動 と表示されてしまいました。 何かOSに足りないものがあるのでしょうか。 シェルスクリプト?とは違うので冒頭に #!/bin/bash のような記述は必要無いですよね?

その他の回答 (3)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.4

> /bin/bashというプログラミング言語(のようなもの)で動かせ、という意味でよいのでしょうか。 そうですね、確かに「スクリプトを動かす環境」という意味ではインタプリタと変わりないのでそういう解釈でもいいかと思います。 > 何も指定しないと動作しない記述があります(if文とか)。 > 実行した際の言語(何かはわかりませんが)では動かない そういうことです。 もっともif自体は(文法の違いはあれど)持ってないシェルはないはずなので動かないというより文法エラーが出ているような気がしますが。 使っているシェルは環境変数SHELLに入っているはずなので、echo $SHELLで見えるかと思います。

rem_1982
質問者

お礼

回答ありがとうございます。 echo $SHELLを実行してみましたところ、 /bin/bashと出ておりました。 指定しないとエラーも出ているので、かなり重要な一文だったんだと認識できました。 ありがとうございました。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.3

> シェルスクリプト?とは違うので いや、これはシェルスクリプトそのものですよ。 #というか「バッチファイル」と「シェルスクリプト」が同じものというのが正しいかも > #!/bin/bash のような記述 は「そのシェル(上の記述ならbash)で動かす」と明示的に指示するものです。 これがない場合はスクリプトを実行したときのシェルで動作しようとしますが、シェルによりスクリプト文法がまちまちであまり互換がないため普通は指定しておきます。 ただ、どうせbashしか使わないのなら書かなくてもさほど問題にはならないでしょう。

rem_1982
質問者

お礼

回答ありがとうございます。 > #というか「バッチファイル」と「シェルスクリプト」が同じものというのが正しいかも そうなんですか。 なんとなく、 バッチファイルはコンソール上で使えるコマンドを羅列したもので、 シェルスクリプトは、if文など言語らしきものを使っているものかと認識しておりました。 言われてみれば echo 等も「言語らしきもの」でしたね。 「シェル」の意味がいまいち認識しにくいのですが、 ウィキペディアなんかには「ある種のプログラミング言語といえる」とありました。 (他では「おまじない」等とかかれてましたが) これと、 > 「そのシェル(上の記述ならbash)で動かす」と明示的に指示するものです を合わせると、 「#!/bin/bash」と指定した場合は、 /bin/bashというプログラミング言語(のようなもの)で動かせ、という意味でよいのでしょうか。 私のLinux環境では「#!/bin/bash」と書けば動作するのですが、 何も指定しないと動作しない記述があります(if文とか)。 つまり、 /bin/bashという言語?では動くけど、 実行した際の言語(何かはわかりませんが)では動かない、ということですね。

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.2

/bin/date を挟んでいるのは、一重引用符(')ではなく、バッククオート(`)ですが、 タイプミスはありませんか。 やっていることは同じですが、一重引用符(')とバッククオート(`)は紛らわしいので、 echo "$(/bin/date) 起動" >> log としてみてはどうでしょうか。

参考URL:
http://www.booran.com/menu/scr/quote.html
rem_1982
質問者

お礼

回答ありがとうございます。 まさに ' と ` を間違えておりました。 (先に回答いただいた方への返信内容は本文のコピーでした) 正常に動作しました。 挙げて頂いた「echo "$(/bin/date) 起動" >> log」も正常に動きました。 四則演算に使うらしい「expr」も動かないなと思っていましたが、そちらも一重引用符を使っていました。 ありがとうございました。

関連するQ&A

  • バッチファイルの作り方?

    バッチファイルについての質問です。 初心者なので、質問の情報が足りないかもしれませんが どうぞよろしくお願いします。 バッチファイルで、現在のアプリケーションを削除後、 再起動、そして新しいアプリケーションをインストールし、 再起動を実現したいと思います。 (アンインストール.exe→Windows再起動→インストール.exe→Windows再起動) これを実現するにはどういうバッチファイルを書けばよいでしょうか? また、バッチファイルではなくても他に方法はないでしょうか? アドバイスよろしくお願いします。

  • バッチファイルでPINGログ取得

    バッチファイルでPINGのログを取得したいと考えています。 下記のバッチを作成して実行してみましたが @echo off set LOG=log.log echo "------------ START -------------" >> %LOG% ping -w 1 -n 1 localhost >> %LOG% 「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」とエラーメッセージが延々と表示されます。 ログにはECHOで出力したSTARTしかありません。 コマンドラインから上記のPINGを打つと正常に終了します。 使用しているOSはWinXP SP2です。 何が原因なのか解決法をご存知の方がいらっしゃいましたら宜しくお願いします。

  • バッチファイルについて

    あるバッチファイルがあります。 そのバッチファイル内では、AとBというバッチが 呼び出されているとします。 このときのAおよびBの処理開始・終了時刻を ログとしてとりたいのですが、どのように記述 すればよいのでしょうか?教えてください。 あいまいな質問で申し訳ないですが よろしくお願いします。

  • Shell関数からバッチファイルを起動後に、バッチファイルが終了するまで待ちたい。

    はじめまして。 掲題の通り、VB.netからshell関数を用いてバッチファイルを起動します。 その後、そのバッチファイルが終了してログファイルの出力を完了した後に、 ファイルを開いて確認したいのです。 thread.sleepなどで大体このくらいかなという時間を待ってみる、 などのやり方しか今は思いつかないのですが、 何か明確にバッチファイルの終了を受け取れる方法は無いものでしょうか。 どなたかご存知の方がいらっしゃいましたらご教授ください。

  • バッチファイルのループ処理の質問です。

    バッチファイルのループ処理の質問です。 バッチファイルでサーバにセキュリティーパッチをインストールしたいのですが、 一件しかインストール出来ません。 ---------------------------------------------- @echo on setlocal set SrcDir=\\192.168.11.5\temp\ for %%i in (%SrcDir%*.msu) do ( %%i /quiet /norestart >>Instarll_log.log IF ERRORLEVEL 3010 GOTO ReqReboot IF ERRORLEVEL 1 GOTO NG IF ERRORLEVEL 0 GOTO OK :NG echo 異常 >> kekka.log echo ERRORLEVELは%ERRORLEVEL%です。 >> kekka.log :OK echo 正常 > kekka.log echo ERRORLEVELは%ERRORLEVEL%です。 >> kekka.log :ReqReboot echo 再起動が必要 >> kekka.log echo ERRORLEVELは%ERRORLEVEL%です。 >> kekka.log ) goto END :END endlocal ---------------------------------------------- 続けて次のファイルをインストールするにはどうすれば良いか 教えてください。

  • バッチファイル

    会社で、OS WindowsXPを使ってきましたが、先日、初めてWindows7のPCを導入しました。 これまでPC購入時、XPのパソコン設定に使っていたバッチファイルがあります。 そのファイルは以前、別の人に作ってもらいました。 そのバッチファイルをWindows7でも使いたいのですが、設定が反映されませんでした。 私にはバッチファイルがさっぱり分かりません。 以下の内容がこれまで使っていたファイルの中身です。 どなたか、Windows7用に修正していただけないでしょうか。 どうぞ、よろしくお願いします。 【やりたい事】 ローカルセキュリティ設定のアカウントポリシーにて、   パスワードの長さ ⇒ 4文字以上   パスワードの変更禁止期間 ⇒ 0日   パスワードの有効期間 ⇒ 365日   パスワードの履歴を記録する ⇒ 0日   パスワードは要求する複雑さを満たす ⇒ 無効   暗号化を元に戻せる状態でドメインの全ておユーザーのPWを保存する ⇒有効 【WindowsXPで使っていたバッチファイルの中身】 @echo off cd c:\ @echo . @echo _______________________________________ @echo . @echo パスワードポリシーを変更します。 @echo (パスワードの有効期限:無期限、最小パスワード文字数:4文字) @echo _______________________________________ pause net accounts /maxpwage:365 /MINPWLEN:4 /MINPWAGE:0 net accounts pause 以上、よろしくお願いします。

  • バッチファイルからVBAに引数を渡したい

    お世話になります。 a.batというバッチファイルがあります。 このファイルを起動させた時にABC.xlsというEXCELが起動するようにしたいのですが、その際にバッチファイル側から"1303"という文字列をabc.xlsに引数として渡したいのです。 EXCEL側ではauto_open(a)で待ち受けて、このaに"1303"が入ってmsgで"1303"と表示させたいのですが、引数は省略出来ません、というエラーが出てしまいます。 どなたかやり方をご教授いただけませんでしょうか?よろしくお願い致します。 環境 WindowsXP SP3 Excel2003 ============================== バッチファイル側 ============================== @echo off echo バッチファイルを実行します。 ABC.xls "1303" echo 終了しました。 ============================== EXCEL VBA側 ============================== Sub auto_open(a As String) Msg a end sub

  • バッチファイルの日付計算が出来ません

    毎月1回実行するバッチファイルがあります。 このバッチファイルは、あるプログラムのログを退避するバッチファイルなので 月に2度以上実行させないようなチェックを入れたいと考えています。 たとえば、 最初に実行する時は、バッチファイルの中で日付を持たせたファイルを出力しておき 2度目の実行時は、日付のファイルを読み込んで1ヶ月以上たっていなければエラーとする ・・・といった事をやりたいのですが、やり方がわかりません。 日付ファイルの出力は、 echo %DATE:/=% >D:\datecheck.log とすれば良いことはわかるのですが、 日付を比較する方法はどうすれば良いでしょうか。 単純にset /Aで引き算をしてしまうと 20100207-20100131=76となってしまいます。。 どうか皆さん、よろしくお願いします(;o;)

  • バッチファイル 時間指定

    バッチファイルをスタートアップに入れています。 手軽で便利なのですが、起動するたびに出てしまうので、if文か何かを使って、前回の実行してから12時間経っていない場合はバッチファイルを終了させるようにできないでしょうか。 robocopyを使ったバッチで、オプションでログを作成するようにしています。そのテキストファイルの作成時間で12時間経っているかどうか判断できればと思っています。

  • バッチファイルで、全てのウィンドウを最小化

    複数の作業を自動化するためにバッチファイルを作っているのですが その中で、「全てのウィンドウを最小化」したり、 「起動している全てのアプリケーションを終了」する部分の 書き方が分かりません。 「全てのウィンドウを最小化」は、「Windowsキー+M」と同じ事ですが どうしてもバッチファイルに組み込みたいです。 あと、「起動している全てのアプリケーションを終了する」の方は、 画面右下に表示されている常駐系ソフトは終了させずに [ALT+TAB]で表示されるようなアプリケーションを 一括で終了させたいです。 どなたか詳しい方、教えてください。