かなり初心者です。
vbsからbatファイルを実行したいと考えています。
実行する迄は簡単に出来たのですが、そのbatファイルを実行する際に引数を渡して実行したいと考えています。
その引数をbat実行前に設定した変数を指定しているのですが上手く行きません。この様な事は出来ないのでしょうか。
batの結果をログ出力したところ、"YYYY"の文字列が引数としてセットされてしまいます。
ex)
YYYY=NNNNN
FSO.Run "C:\data\\test.bat YYYY"
基本的なことですが変数に文字列を代入するには
A="abc"のようにダブルクォーテーションで囲みます
文字列の結合は&の記号を使います。
A="abc"
B="012" & A
とするとBには012abcの文字列が代入されます。
単純に
FDO.Run "C:\data\test.bat " & """" & YYYY & """"
の間違いなんじゃないかと…(ぇ、誤爆?…orz
返答ありがとうございます。勉強不足ですみません。
変数に文字列を代入ですが...何となく分かるのですが...
実際、以下の感じで値を指定しています。
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"
> 変数に文字列を代入ですが...何となく分かるのですが...
> 実際、以下の感じで値を指定しています。
> 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
ガッさん。ありがとうございます。
> …この辺りは言語システムの基本なので、質問じゃありませんねw;
すみません...
そうなんですね...見よう見まねは無理ですね...
> FSO.Run "C:\data\test.bat " & Format$(Now,"YY.MM.DD")
> でできるんじゃないかな、と。
出来ないようです...Formatの後にある$を付けたままだとエラーになります。外すとエラーにならないのですが、batの引数として渡されない様です...
> あと、Date型→String型への変換が行われた場合、
> システムの設定によって表記が変わるみたいなので止めたほうがいいで
了解です。ありがとうございます。
( ゜д゜)ハッ!
ご、誤爆してたよ…(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でも同じだと思います。
※…ご、誤爆ないよな…
ここで
>YMD = YYYY &"."& MM & "." & DD
ちゃんと文字列の結合の仕方が分かっているみたいなのに
なぜ
>FSO.Run "C:\data\\test.bat YMD"
なってしまうのかが分からないんですが。
””の中が文字列として扱われるのが分かってそうしてるんじゃないんですか?
それとも何かのコピペで悩んでいるんだったら、もう少し基礎を勉強してから
やった方がいいですね。
ガッさん、ありがとうございました。
Date型→String型に関する場合は気をつけます。
ポッターさん、ご指摘ありがとうございます。
その通り基礎をしっかりやります。最後の指摘で方法が分かりました。
夜遅く迄ありがとうございました。
ツイート | ![]() |