2016-08-29 167 views
1

バッチファイルからvbスクリプトファイルに引数を渡そうとしています。バッチファイルからVBScriptファイルに引数を渡します

set InputFile ="C:\Temp\InputFile_mod.csv" 
set outPutFile = "C:\Temp\outputFile.dat" 

私は以下のように変数を渡そうとしましたが、私はvbscriptファイルに何も取得していません。

cscript SFEVBMacro.vbs InputFile outPutFile 

が、私は、ファイルのダイレクトパスを渡すと、それが正常に動作している以下のような

cscript SFEVBMacro.vbs C:\Temp\InputFile_mod.csv C:\Temp\outputFile.dat. 

何かが変数と引数を渡すで間違っていますか?

のVBScriptコード:

Set args = WScript.Arguments 
inputFile = WScript.Arguments.Unnamed(0) 
createdFilePath = WScript.Arguments.Unnamed(1) 

Sub ReadCSVFile() 
    Set objFileToRead = objFSO.OpenTextFile(inputFile,1) 
    REM Read the csv file 
End Sub 
ReadCSVFile 

誰が助けてくださいすることができますすることができます。

+0

Ryan私はvbscriptコードを追加しました。 – surendra

+0

'set'コマンドラインの' = '記号の周囲の空白を削除します。そうしないと、変数名と値の一部になります。変数を展開(読み込み)するときに、その名前を '%'の記号の間に置く必要があります... – aschipfl

答えて

0

問題は引用符で囲まれている可能性があります。文字列の代わりに二重引用符で投稿した最初の2行を囲みます。
引用符をつけていないファイルパスを渡しているかのように役立ちますが、最初の例では、引用符でそれらを設定します。
他の方法は、パラメータがvbscriptに入るときに二重引用符をトリムすることです。

+0

私は運がありませんでした。しかし、変数iを渡している間、変数名はその値ではなく渡されます。 – surendra

+0

ああ...うん:D変数名の前後に '%'をつける必要があります: '%varname%' – geisterfurz007

2

コードには2つの問題があります。最初のものは

set InputFile ="C:\Temp\InputFile_mod.csv" 
      ^
set outPutFile = "C:\Temp\outputFile.dat" 
      ^^ 

(同等の左側に配置された)変数名に含まれて示されている空間と値には、格納された変数代入(同等の右側)

ありますこれは、特殊文字の問題を防ぐために、引用値の割り当てに良い習慣ですが、お奨めする構文は

set "InputFile=C:\Temp\InputFile_mod.csv" 
set "outPutFile=C:\Temp\outputFile.dat" 
が 引用符が割り当てを守る

、等号の周りのスペースがないと、この構文で、それを注意しています、引用符はない変数値で渡されます。

第2の問題は、変数の使い方です。あなたのvbscriptコードは、2つの変数名が2つのファイル名を必要としません。したがって、変数名を渡す必要はなく、変数名の中に格納されます。バッチファイルでは、これは%varname%を使用して行われます。

set "InputFile=C:\Temp\InputFile_mod.csv" 
set "outPutFile=C:\Temp\outputFile.dat" 

cscript SFEVBMacro.vbs "%InputFile%" "%outPutFile%" 

バッチパーサーは、変数読み取り操作を変数内の値に置き換えてコマンドを実行します。

あなたの代わりに変数値の変数名(元のコード)を渡すことを好む場合は、あなたがそれを行うことができますが、その後、あなたのVBScriptの変数の内容をコードとして

With WScript.CreateObject("WScript.Shell").Environment("PROCESS") 
    inputFile = .Item(WScript.Arguments.Unnamed(0)) 
    createdFilePath = .Item(WScript.Arguments.Unnamed(1)) 
End With 

を取得するように変更する必要があります環境変数名を受け取る場合、WScript.ShellインスタンスのEnvironmentプロパティを使用して、プロセス環境から変数の内容を取得する必要があります。

+0

ありがとうMC ND ...うまくいきました... – surendra

関連する問題