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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Git

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

VBA

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

Word

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

コマンドプロンプト

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

Q&A

解決済

2回答

3261閲覧

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

momosumomo

総合スコア28

Git

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

VBA

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

Word

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

コマンドプロンプト

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

0グッド

0クリップ

投稿2017/06/12 06:11

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

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

VBA

1 Dim CF As String 2 CF = ActiveDocument.Path 3 MsgBox CF 4 5 'WSH(Windows Scripting Host)への参照作成 6 Dim WSH 7 Set WSH = CreateObject("WScript.Shell") 8 9 '実行するMD-DOSコマンド 10 Dim cdCmd As String 11 Dim sCmd As String 12 cdCmd = "cd " & CF 13 sCmd = "スクリプトコマンド(gitコマンド)" 14 15 MsgBox cdCmd & " && " & sCmd 16 17 '作業フォルダの指定※1 18 'WSH.CurrentDirectory = CF 19 20 'Execメソッドを実行(%ComSpec%でコマンドシェルを自動判定) 21 Dim wExec 22 Set wExec = WSH.Exec("%ComSpec% /c " & cdCmd & " && " & sCmd) 23 24 'MS-DOSコマンドの完了待ち 25 Do While wExec.Status = 0 26 DoEvents 27 Loop 28 29 'コマンドの実行結果出力 30 Dim Result 31 Result = wExec.StdOut.ReadAll 32 MsgBox Result 33

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

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/12 08:28

編集2017/07/13 12:16
otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momosumomo

2017/06/27 11:44

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

2017/06/27 13:14

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

2017/07/10 11:46

「cdコマンドでフォルダの移動 && gitコマンド実行」ができません。 cdコマンドで指定しているフォルダの指定は、 正しく指定できていることは確認しております。
otn

2017/07/10 12:16

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

2017/07/12 06: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 が実行できますが、 作業ディレクトリを指定しなかったら実行できない理由が知りたいです。 作業ディレクトリの指定が必須なのでしょうか。
otn

2017/07/12 14:24

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

2017/07/13 04:41

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

2017/07/13 11:58

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

2017/07/13 12:17

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

2017/07/18 08:24

ご丁寧にコメントの記載、誠にありがとうございました。 また、理解するまでにお手数をおかけして大変申し訳ありませんでした。 ディレクトリ指定を行わなくてもWSH.Exec()のカッコ内のコマンドが実行できることがようやくわかりました。ありがとうございます。 ディレクトリ指定を行わなくてもWSH.Exec()のカッコ内のコマンドが実行できることが分かりましたのでこの質問をCLOSEします。
guest

0

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

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

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

投稿2017/07/18 08:27

momosumomo

総合スコア28

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問