• ベストアンサー

WSHについて教えてください

他人の書いたプログラムを解析しているのですが、意味のわからない 行があって困っています。 下記はtest.txtをいうファイルを読み込み、その中に文字列"<checktest>"が 含まれていたら"-1"を返す関数です。 ■関数部分 function checktext(InFileN) var LineStr = new String(); while(!InFileN.AtEndOfStream) { LineStr = InFileN.ReadLine(); WScript.Echo(LineStr); WScript.Echo(">>" + LineStr.indexOf("<checktest>")) if(-1 < LineStr.indexOf("<checktest>")) { return(-1); } } return(1); ■関数呼び出し部分 var FileN,CheckFlg; FileN = FileSys.OpenTextFile(test.txt); CheckFlg = checktext(FileN); この関数の8行目の処理の意味がわかりません。 WScript.Echo(">>" + LineStr.indexOf("<checktest>")) <checktest>という文字は先頭にあるので、LineStr.indexOf("<checktest>") は0を返すと思います。 そうすると、この行は">>0を表示する"という意味でしょうか? なんのためにこの行があるのかわかりません。 どなたかわかる方がいらっしゃいましたら教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • selju
  • ベストアンサー率57% (100/173)
回答No.2

script作成途中におけるCheckWriteでは無いですか。 ほら、ここで見つかったんだぞって明示的に見せるだけのものだと思います。 見つからない間は、「>>-1」 見つかったら、「>>0」 と言う感じ。 返り値だけが必要であれば、その上の行のEchoも含めて、 コメントにしても問題ないと思いますよ。

asakura
質問者

お礼

なるほど! それなら納得できますね。 ありがとうございます。

その他の回答 (1)

  • Veil
  • ベストアンサー率18% (68/369)
回答No.1

ここの掲示板で聞いたほうがいいかも

参考URL:
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/wshtop.htm
asakura
質問者

お礼

勉強になるサイトですね! ありがとうございます。

関連するQ&A

  • vbsでテキストファイル内の文字列検索

    初心者です。 テキストファイルを指定し、含まれる文字列を検索し、 結果表示したいと考えております。 色々探して、以下で作成したのですが、 うまく動いてくれません。 出来ましたら、テキストファイルの中の文字列の 一部分を指定して動作させたいと思っております。 どなたかご教示のほど宜しくお願い致します。 ---------------------------------------------------- Set WSHFso = CreateObject("Scripting.FileSystemObject") Set WshShell = WScript.CreateObject("WScript.Shell") Dim strSearchWord Set tmpFile = WSHFso.OpenTextFile("C:\AAA.txt") Do Until tmpFile.AtEndOfStream tmpLine = tmpFile.ReadLine strSearchWord = strSearchWord & tmpLine & vbcrlf Loop Dim SearchWord SearchWord = split(strSearchWord," ") if InStr(SearchWord(ix), "test")<>0 then WScript.Echo " testを含みます。" else WScript.Echo " testを含みません。" end if ----------------------------------------------------

  • WSH(Jscript)でファイル一覧

    初めまして。 WSH初心者の者です。 ファイル一覧についてご質問があります。 下記のようなスクリプト(.js)を作成したいと思っています。 「D:\\test」の中身 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt これらをWSHで一覧(コレクション)として取得し、 配列のように test[0] = "1.txt"; test[1] = "2.txt"; test[2] = "3.txt"; test[3] = "4.txt"; test[4] = "5.txt"; test[5] = "6.txt"; 別々に取り出したいと思っております。 現状リファレンス等を参考に下記のような記述をしてみました。 ※ほとんどリファレンス通りです;汗 var fso = new ActiveXObject("Scripting.FileSystemObject"); var oFolder = fso.GetFolder("D:\\test"); var oMessage = ""; var oEFiles = new Enumerator(oFolder.Files); for( ; !oEFiles.atEnd(); oEFiles.moveNext()) { var oFiles_name = oEFiles.item(); oMessage += oEFiles.item().Name + "\n"; } WScript.Echo(oMessage); これで実行すると Windows Script Host 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt と表示され、できた!と思っていたのですが、 一つ一つ配列で取り出そうと、 WScript.Echo(oMessage[0]); と足すと、何も入っていない状態になってしまいます。 この場合、どの様に修正、追加すればいいのかわからず、 迷っています。 (根本から使い方を間違っている?) もしお分かりの方がいらっしゃいましたら、 ご教授お願い致します。

  • WSHの正規表現について

    WindowsXPのCACLSコマンドの出力結果(テキストにリダイレクト)に改行や復帰が入っていて、空行の削除をしたいのです。 下記のプログラムを作ったのですが、復帰コードが 入っている箇所がとれないのです。どなたかご教授お願い致します。。。 Set fso = CreateObject("Scripting.FileSystemObject") Set src = fso.GetFolder("C:\WORK") Set regEx1 = New RegExp srhStr1 = "^ *$" regEx1.Pattern = srhStr1 regEx1.Global = True regEx1.IgnoreCase = True Set TextFile = fso.OpenTextFile("cacls結果.txt") Do Until TextFile.AtEndOfStream tmpLine = TextFile.ReadLine If regEx1.Test(tmpLine) Then else srhLine = srhLine & tmpLine & vbNewLine End If Loop WScript.Echo srhLine

  • VBS 改行無しのファイル抽出方法

    いつもお世話になっております。 WindowsXP環境にある下記のようなVBSがあります。 コード------------------------------------------------------------------ path = "a.txt" Set FSO = WScript.CreateObject( "Scripting.FileSystemObject" ) '全行読み込み処理 (改行を1行単位として) Set f = FSO.OpenTextFile( path ) Do Until f.AtEndOfStream line = f.ReadLine() i_line = f.Line - 1 Loop WScript.Echo "全件数= " & i_line '最終行-5読み込み処理 Set f = FSO.OpenTextFile( path ) For i=1 To i_line - 6 f.SkipLine Next LAST5 = f.ReadLine() MOJI = Mid(LAST5,20,5) WScript.Echo "文字 = " & MOJI コード------------------------------------------------------------------ 上記VBSの簡単な流れは・・・ (1)改行で1行とみなす a.txt を全行取得。 (2)全件数を表示 (3)最終行から5行前の行まで移動。 (4)(3)の行から20文字からの5文字を取得。 (5)5文字を表示。 とこんな感じです。 しかし、これだと改行有のファイルにのみ有効で 改行無には対応出来ません。 例えば120文字で1行とみなすファイルでも同様の 取得がしたいのです。 ご存知の方がいれば、ご教授願いませんでしょうか? 何卒、宜しくお願い致します。

  • 【VBScript】ディレクトリ内のファイルを、リストを読み込んで分割

    【VBScript】ディレクトリ内のファイルを、リストを読み込んで分割 ■プログラム及びファイルに関する備考 .\test\     = 分割を行いたいファイルが格納されたディレクトリ Dir_FileList.txt = testディレクトリ内のファイルをリスト化したもの。           相対パスにて、1行ずつ改行して記述する。 ■やりたい事 Dir_FileList.txtという、.\test\内に配置されたファイルをリスト化したtxtを 1行ずつ読み込み、読みこんだファイルに対し、10行毎に分割処理を行いたいと思っています。 分割したファイルは、分割元のファイルが格納されたディレクトリと同じ、.\test\ディレクトリに作成し、 分割前の元ファイルを最後に削除するという処理をリストに書かれた全てのファイルに対して行いたいです。 下記のようにコーディングをしたのですが、 どうも「Do Until ( fILE1.AtEndOfStream )」のループ文の処理が行われていない?ようで、 testディレクトリ内部のファイルが分割されません。 色々試したのですが、VBScriptを触るのは初めてでなかなか上手くいきませんでした。 どこが間違っていて、どのように修正すれば動くようになるでしょうか? お手数ですが、ご教授をお願い致します。 ---------------------------------------- Option Explicit Dim flReadFSO, flReadFSO2, fFolder, fILE, flrSubFolder Set flReadFSO = CreateObject("Scripting.FileSystemObject") Set flReadFSO2 = WScript.CreateObject("Scripting.FileSystemObject") Set fFolder = flReadFSO2.GetFolder(".") Dim name1, fILE1 name1 = fFolder & "\Dir_FileList.txt" Set fILE1 = flReadFSO.OpenTextFile(name1) Dim oneLineTxt oneLineTxt ="" Dim FSO set FSO = WScript.CreateObject("Scripting.FileSystemObject") Do Until ( fILE1.AtEndOfStream ) oneLineTxt = fILE1.ReadLine WScript.Echo oneLineTxt arg = ".\test\test01.txt" set fin = FSO.OpenTextFile(arg, 1) fbn = FSO.GetBaseName(arg) fen = FSO.GetExtensionName(arg) nf=0 set fout = FSO.OpenTextFile(".\test\" & fbn & "_" & nf & "." & fen, 2, true) nl=0 Do While Not fin.AtEndOfStream fout.WriteLine fin.ReadLine nl=nl+1 if nl>9 then fout.Close nf=nf+1 if nf>9 then exit do set fout = FSO.OpenTextFile(".\test\" & fbn & "_" & nf & "." & fen, 2, true) nl=0 end if Loop fin.Close FSO.DeleteFile arg, True Loop fILE1.Close ----------------------------------------

  • VBS

    VBSであるファイルを1行ずつ読み込み、その読み込んだ値を ある別のファイルにリダイレクトしたいのですが、 どのように書けばよいか教えてください。 下記のように、echoでは出すことができるのですが、 ファイルにリダイレクトというのができません。 よろしくお願いします。 ==== sample shell ========================= Option Explicit On Error Resume Next Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then Set objFile = objFSO.OpenTextFile("d:\dr1.txt") If Err.Number = 0 Then Do While objFile.AtEndOfStream <> True WScript.Echo objFile.ReadLine Loop objFile.Close Else WScript.Echo "ファイルオープンエラー: " & Err.Description End If Else WScript.Echo "エラー: " & Err.Description End If Set objFile = Nothing Set objFSO = Nothing ============================================================

  • WSHでファイルを読み込まない。。。

    WSHで2個以上のtxtファイルの中身を連結して1つのファイルにして 掃き出すというプログラムを作りました。 いったんは正常に動作をしたのですが、最近PCの乗り換えを行い、 それ以降まったく動作しなくなりました。。。 仕事で使うプログラムの一部なので困っています。 どなたかご教授ください!! OSはPCの乗り換えをする前も後もXPのSP2です。 var objArgs = WScript.Arguments; var xmldc = new ActiveXObject("Microsoft.XMLDOM"); xmldc.async = false; //読み込んだファイルの数が2個以上か数える。 if (objArgs.Count() < 2) {//1個の場合・・・ WScript.Echo("txtファイルを2つ以上選択してください"); } else { //2個以上のときの処理 } 上記のプログラムで、2個以上のファイルをドラッグアンドドロップ で読み込ませようとしても必ず、 "txtファイルを2つ以上選択してください" と表示されます。 なぜでしょう??

  • WSH .TargetPath 中の /

    JScript です。 CreateShortcutプロパティのTargetPathを指定する際、 引数など渡す為のコマンドラインを含ませようとする場合 スラッシュを期待するものが実際には¥に置き換わってしまいます。 明示的にスラッシュを指定する事は出来るでしょうか? var objSh = WScript.CreateObject("WScript.Shell"); var sc = objSh.CreateShortcut("C:\\test.lnk"); sc.TargetPath = "C:\\test.exe \/m" など、/m で引数で渡そうとすると WScript.Echoなどでは正しく/mと表示されますが 実際のショートカットでは¥mと表示されてしまいます。 指定する方法はありますでしょうか? あと"C:\\test.exe \”C:\\test.exe\"" などの渡し方もエラーになってしまいます。 どの様に記述すべきでしょうか

  • テキストファイルに記載されているか調べるには。スクリプト

    Jスクリプトの質問です。 県名のみ記載されている jusho.txt があります。 この中からある県名が記載されているか調べるスクリプトを作ろうとしてますがうまくできません。 登録県名があったらアラートで表示させるにはどうすればいいですか。 途中まで考えましたがわからなくなりました。 -------------------------------------------- //調べたい県名をここで入力 kenmei="愛知県" //登録住所か調べる。 var fso = WScript.CreateObject("Scripting.FileSystemObject"); var stream = fso.OpenTextFile("jusho.txt",1); //1は読み専用 while (stream.AtEndOfStream="false"){ var jusho = stream.ReadLine(); if(kenmei=jusho){alert ("登録されてます")}; }; ----------------------------------------- jusho.txt と スクリプトは同じフォルダにあります。

  • ファイル内の文字列を置換するcscriptについて

    お世話になります。 早速ですが、 以前、以下のような、「UNIXファイルの文字列を置換する」プログラムを Cscript で記述する方法を教えていただいたものですが、 cscript //nologo foo.vbs < t22.org > t22.txt ====foo.vbs==================================================== Do While Not WScript.StdIn.AtEndOfStream str = WScript.StdIn.ReadLine WScript.StdOut.Write replace(str,"abc","xxx") & vbLF Loop 今回、これをさらに、 Cscript で「置換するファイル」と「置換する文字列」も指定するプログラム にしたいと思い記述してみたのですが、下記のような問題が発生します。 「置換後のファイルの最後に改行文字が入ってしまいます。」原因がわかりません。 cscript //nologo f00.vbs t22.txt aaa xxx ====foo.vbs==================================================== Dim myFile Dim myRec Dim fso Dim txt, wd1, wd2 txt = WScript.Arguments(0) wd1 = WScript.Arguments(1) wd2 = WScript.Arguments(2) WScript.Echo txt WScript.Echo wd1 WScript.Echo wd2 Set fso = CreateObject("Scripting.FileSystemObject") Set myFile = fso.OpenTextFile(txt) myRec = myFile.ReadAll myRec = replace(myRec,wd1,wd2) myFile.Close Set myFile = fso.CreateTextFile(txt) myFile.WriteLine (myRec) myFile.Close =============================== このコードのどこに問題があるのでしょうか? 読み込んでいるファイルは、Shift-JIS LF改行のファイルです。 あるいは、 もっと簡単な記述方法等ありましたら、ご意見、ご指導ください。