質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • VBA

    2296questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Git

    1629questions

    Gitはオープンソースの分散バージョン管理システム(DVCS)です。

  • コマンドプロンプト

    423questions

    コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

  • Word

    98questions

    Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

Word VBA gitコマンド MD-DOSコマンド使用時の作業フォルダの指定

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,085

momosumomo

score 14

WScript.Shellを扱う際は、
cdコマンドで作業フォルダの指定はできず、
作業フォルダの指定必ずを行わないと期待通りのコマンド動作ができないのか否か知りたいです。

下記のようなプログラムでコマンドの実行結果が出力されない理由が分かりません。
VBAのWScript.Shellの使い方?、VBAでの作業フォルダについて詳しい方に教えていただきたいです。
お手数ですが、何卒よろしくお願いいたします。

    Dim CF As String
    CF = ActiveDocument.Path
    MsgBox CF

    'WSH(Windows Scripting Host)への参照作成
    Dim WSH
    Set WSH = CreateObject("WScript.Shell")

    '実行するMD-DOSコマンド
    Dim cdCmd As String
    Dim sCmd As String
    cdCmd = "cd " & CF
    sCmd = "スクリプトコマンド(gitコマンド)"

    MsgBox cdCmd & " && " & sCmd

   '作業フォルダの指定※1
   'WSH.CurrentDirectory = CF

    'Execメソッドを実行(%ComSpec%でコマンドシェルを自動判定)
    Dim wExec
    Set wExec = WSH.Exec("%ComSpec% /c " & cdCmd & " && " & sCmd)

    'MS-DOSコマンドの完了待ち
    Do While wExec.Status = 0
        DoEvents
    Loop

    'コマンドの実行結果出力
    Dim Result
    Result = wExec.StdOut.ReadAll
    MsgBox Result


※1 以前は、作業フォルダの指定 をコメントアウトした上記コードの状態で期待通りの動きをしていました。

※1 コメントアウトしている作業フォルダの指定をコメントアウト外したら、
上記ソースは期待通りの動きをします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

cdは可能です。
異なるドライブへの移動であれば、cd /d (もしくはpushd)とする必要がありますが、そのあたりは大丈夫でしょうか?

VBAでのサンプルです

cdが効いているのが分かると思います。

Sub foo()
    Dim WSH, wExec
    Dim cmd1 As String, cmd2 As String

    Set WSH = CreateObject("WScript.Shell")

    cmd1 = "cmd.exe /c dir"
    cmd2 = "cmd.exe /c cd C:\ && dir"

    WSH.CurrentDirectory = "C:\Users"

    Set wExec = WSH.Exec(cmd1)
    Do While wExec.Status = 0
        DoEvents
    Loop
    Debug.Print wExec.StdOut.ReadAll

    Set wExec = WSH.Exec(cmd2)
    Do While wExec.Status = 0
        DoEvents
    Loop
    Debug.Print wExec.StdOut.ReadAll
End Sub

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/06/27 20:44

    はい、異なるドライブへの移動はしていません。
    cdコマンドでディレクトリの移動を行っているのに、
    移動先のディレクトリが作業ディレクトリに設定できないのがなぜかわかりません。

    キャンセル

  • 2017/06/27 22:14

    現象はどう言うものでしょうか?
    移動前のディレクトリでコマンドが実行されると言うこと?

    キャンセル

  • 2017/07/10 20:46

    「cdコマンドでフォルダの移動 && gitコマンド実行」ができません。

    cdコマンドで指定しているフォルダの指定は、
    正しく指定できていることは確認しております。

    キャンセル

  • 2017/07/10 21:16

    > できません。

    繰り返し聞きますが、できませんというその具体的な現象は何でしょうか?
    移動前のディレクトリでコマンドが実行されると言うこと?

    キャンセル

  • 2017/07/12 15:40

    WScript.Shellを扱う際は、
    cdコマンドで作業フォルダの指定はできず、
    作業フォルダの指定必ずを行わないと期待通りのコマンド動作ができないのか否か知りたいです。

    '作業フォルダの指定※1
    'WSH.CurrentDirectory = CF


    のように作業ディレクトリを指定すれば

    'Execメソッドを実行(%ComSpec%でコマンドシェルを自動判定)
    Dim wExec
    Set wExec = WSH.Exec("%ComSpec% /c " & cdCmd & " && " & sCmd)

    'MS-DOSコマンドの完了待ち
    Do While wExec.Status = 0
    DoEvents
    Loop

    が実行できますが、
    作業ディレクトリを指定しなかったら実行できない理由が知りたいです。
    作業ディレクトリの指定が必須なのでしょうか。

    キャンセル

  • 2017/07/12 23:24

    ???
    質問が同じなら、回答も同じです。
    問題なくcdコマンドで出来ます。

    キャンセル

  • 2017/07/13 13:41

    ???
    WSH.Exec()のカッコ内のコマンドは
    WSH.CurrentDirectory = CF
    でディレクトリ指定を行わないと実行できないのか
    を知りたいのですが

    キャンセル

  • 2017/07/13 20:58

    同じ質問には同じ回答しか出来ません。
    WSH.Exec("%ComSpec% /c " & cdCmd & " && " & sCmd)
    だけで出来ます。

    キャンセル

  • 2017/07/13 21:17

    サンプルを追記しました。

    キャンセル

  • 2017/07/18 17:24

    ご丁寧にコメントの記載、誠にありがとうございました。
    また、理解するまでにお手数をおかけして大変申し訳ありませんでした。

    ディレクトリ指定を行わなくてもWSH.Exec()のカッコ内のコマンドが実行できることがようやくわかりました。ありがとうございます。
    ディレクトリ指定を行わなくてもWSH.Exec()のカッコ内のコマンドが実行できることが分かりましたのでこの質問をCLOSEします。

    キャンセル

0

WSH.Exec()のカッコ内のコマンドは
WSH.CurrentDirectory = CF
で作業ディレクトリの宣言をしなくても
カッコ内のコマンドさえ合っていれば実行に成功することが
教えていただいたコードで確認できた。

ただし、
自身の書いたコードにて、
WSH.CurrentDirectory = CF で
ディレクトリ指定を行ったコードはWSH.Exec()のカッコ内のコマンドを実行し成功するが、

しなかったコード(WSH.CurrentDirectory = CFをコメントアウトしたコード)が失敗する原因は分からなかった。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • VBA

    2296questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Git

    1629questions

    Gitはオープンソースの分散バージョン管理システム(DVCS)です。

  • コマンドプロンプト

    423questions

    コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

  • Word

    98questions

    Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。