vbs内からbatファイル起動時の引数設定をするには

解決


iwai  2005-04-21 05:28:49  No: 121122

かなり初心者です。
vbsからbatファイルを実行したいと考えています。
実行する迄は簡単に出来たのですが、そのbatファイルを実行する際に引数を渡して実行したいと考えています。
その引数をbat実行前に設定した変数を指定しているのですが上手く行きません。この様な事は出来ないのでしょうか。
batの結果をログ出力したところ、"YYYY"の文字列が引数としてセットされてしまいます。
ex)
YYYY=NNNNN
FSO.Run "C:\data\\test.bat YYYY"


ポッター  2005-04-21 07:03:31  No: 121123

基本的なことですが変数に文字列を代入するには
A="abc"のようにダブルクォーテーションで囲みます
文字列の結合は&の記号を使います。
A="abc"
B="012" & A
とするとBには012abcの文字列が代入されます。


ガッ  2005-04-21 07:28:19  No: 121124

単純に
FDO.Run "C:\data\test.bat " & """" & YYYY & """"
の間違いなんじゃないかと…(ぇ、誤爆?…orz


iwai  2005-04-21 08:08:17  No: 121125

返答ありがとうございます。勉強不足ですみません。
変数に文字列を代入ですが...何となく分かるのですが...
実際、以下の感じで値を指定しています。
batを実行する前の時点でYMDへ代入された値は、YYYY.MM.DDが入りますが、batの引数に設定するとYMDとされてしまいます...
根本?基本的な事がわかっていないのでしょうか...
D = date()
YYYY = Left(D,4)
MM = Mid(D,6,2)
DD = Mid(D,9,2)
YMD = YYYY &"."& MM & "." & DD
FSO.Run "C:\data\\test.bat YMD"


ガッ  2005-04-21 08:23:22  No: 121126

> 変数に文字列を代入ですが...何となく分かるのですが...
> 実際、以下の感じで値を指定しています。
> batを実行する前の時点でYMDへ代入された値は、YYYY.MM.DDが入りますが、batの引数に設定するとYMDとされてしまいます...
> 根本?基本的な事がわかっていないのでしょうか...
まぁ、とある言語(perlやruby?)なんかとは違って、文字列内の変数は展開されません。
a=10
Msgbox "a"
なら、当たり前に"a"が表示されます。
…この辺りは言語システムの基本なので、質問じゃありませんねw;

> D = date()
> YYYY = Left(D,4)
> MM = Mid(D,6,2)
> DD = Mid(D,9,2)
> YMD = YYYY &"."& MM & "." & DD
> FSO.Run "C:\data\\test.bat YMD"
そうですねぇ…多分
FSO.Run "C:\data\test.bat " & Format$(Now,"YY.MM.DD")
でできるんじゃないかな、と。
あと、Date型→String型への変換が行われた場合、
システムの設定によって表記が変わるみたいなので止めたほうがいいです。

※と書きながら誤爆していると思う自分もいたりして…(orz


iwai  2005-04-21 08:43:30  No: 121127

ガッさん。ありがとうございます。

> …この辺りは言語システムの基本なので、質問じゃありませんねw;
すみません...
そうなんですね...見よう見まねは無理ですね...

> FSO.Run "C:\data\test.bat " & Format$(Now,"YY.MM.DD")
> でできるんじゃないかな、と。
出来ないようです...Formatの後にある$を付けたままだとエラーになります。外すとエラーにならないのですが、batの引数として渡されない様です...

> あと、Date型→String型への変換が行われた場合、
> システムの設定によって表記が変わるみたいなので止めたほうがいいで
了解です。ありがとうございます。


ガッ  2005-04-21 09:07:51  No: 121128

( ゜д゜)ハッ!
ご、誤爆してたよ…(orz
すみません、最初にVBSって書いてあるのを読み飛ばしていました(orz

> ガッさん。ありがとうございます。
すみません、言語を間違って捉えていました。
申し訳ございません(TT

> > …この辺りは言語システムの基本なので、質問じゃありませんねw;
> すみません...
> そうなんですね...見よう見まねは無理ですね...
…ぅ…寧ろオレの目が節穴なのが(orz)です…

> > FSO.Run "C:\data\test.bat " & Format$(Now,"YY.MM.DD")
> > でできるんじゃないかな、と。
> 出来ないようです...Formatの後にある$を付けたままだとエラーになります。外すとエラーにならないのですが、batの引数として渡されない様です...
VBSにはFormat()メソッドが用意されていないようですね…
なので、YY.MM.DD形式にするなら、専用の関数を作ってみてはどうでしょう?
…ためしに作ってみました(Σ

'some.vbs
MsgBox YYMMDD(Now)

Function YYMMDD(ByVal d)
yy=R2Str(CStr(Year(d)))
mm=R2Str(CStr(Month(d)))
dd=R2Str(CStr(Day(d)))
YYMMDD=yy & "." & mm & "." & dd
End Function

Function R2Str(ByVal n)
R2Str=Right("0" & n,2)
End Function

YYMMDD([Date型])で、Date型に対応するYY.MM.DD形式の文字列が受け取れるはずです。

> > あと、Date型→String型への変換が行われた場合、
> > システムの設定によって表記が変わるみたいなので止めたほうがいいで
> 了解です。ありがとうございます。
コレに関しては、多分VBSでも同じだと思います。

※…ご、誤爆ないよな…


ポッター  2005-04-21 09:32:11  No: 121129

ここで
>YMD = YYYY &"."& MM & "." & DD
ちゃんと文字列の結合の仕方が分かっているみたいなのに
なぜ
>FSO.Run "C:\data\\test.bat YMD"
なってしまうのかが分からないんですが。
””の中が文字列として扱われるのが分かってそうしてるんじゃないんですか?
それとも何かのコピペで悩んでいるんだったら、もう少し基礎を勉強してから
やった方がいいですね。


iwai  2005-04-21 19:09:52  No: 121130

ガッさん、ありがとうございました。
Date型→String型に関する場合は気をつけます。
ポッターさん、ご指摘ありがとうございます。
その通り基礎をしっかりやります。最後の指摘で方法が分かりました。

夜遅く迄ありがとうございました。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加