プロが教えるわが家の防犯対策術!

VBSを勉強中です。下記URLによるとnotepadの起動は出来るようですが、編集は可能でしょうか?
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/index.h …

編集は始めの2, 3行だけです。notepad用のコマンド一覧とかあるのでしょうか。

エクセルVBAはそこそこ出来ます。

A 回答 (6件)

単純に置換なら以下のコードで実装可能


ただし、エラー処理などは一切しておりません。
VBS勉強中とのことなので、各々の関数の使い方や意味については、ご自身で学習してください。
どれも基礎レベルの内容です。

'------Sample.vbs---------

'Sample.txtファイル内の"t"の文字を""へ置き換え、置き換えたファイルをSample2.txtとして出力
'作成したVBSファイルと読み込み用ファイルは同一フォルダ内に配置する必要がある

Dim objFSO 'ファイルシステムオブジェクト
Dim Readtxt , Writetxt '読み込み用ファイル、書き込み用ファイル

Set objFSO = CreateObject("Scripting.FilesystemObject")
Set Readtxt = objFSO.OpenTextFile( objFSO.GetParentFolderName( Wscript.ScriptFullName ) & "\Sample.txt" , 1 )
Set Writetxt = objFSO. OpenTextFile ( objFSO.GetParentFolderName( Wscript.ScriptFullName ) & "\Sample2.txt" , 2 ,True )

Do until Readtxt.AtEndOfStream
Writetxt.Writeline Replace(Readtxt.Readline,"t","")
Loop

Set objFSO = Nothing
Readtxt.Close
Writetxt.Close
    • good
    • 0
この回答へのお礼

ありがとうございます。
さすがに知らない用語が多いです。順次紐解いて勉強していきます。

お礼日時:2016/04/13 21:10

#4 の補足:


私はあまり詳しいわけではありませんし、役に立たない情報ですが、

>notepad用のコマンド一覧とかあるのでしょうか。

調べてみたのですが、XP時代の旧Notepad とは違うようです。
コマンドは、具体的には、Win32 APIで動かすことになりますが、その内容を調べるのは、
Resource Hacker というツールで、Notepad のDialogの部分を逆アセンブルするようなことをします。

ここの真ん中ぐらいに画像があります。この左の欄の"Dialog"などで、handle 名を取得します。以下は、旧Notepad です。

http://www.techrepublic.com/article/step-by-step …

Win32 APIは、
Set win32 = CreateObject("DynamicWrapper")
のように使います。
http://www.drdobbs.com/windows/an-automation-obj …

UWSC のほうが簡単だと思います。

>ただ、目的はVBS勉強でもありますので、今回はVBS前提で作ります。

難しい所に手を出しますね。普通の言語のほうがまだ楽です。
Excel VBAとは格段に難しいです。

講座は、MSの「Hey, Scripting Guy!」で、何年も、ずっと続いていたのですが、途中でわかりにくくなって挫折した覚えがあります。

ともかく、専用エディタを一つ手にいれることをオススメします。
前回の、SystemScripter や VBSEdit/HTAEdit を入れると良いです。一般のエディタでは、デバッグが大変です。#4は、SystemScripter と普通のエディタ半々で書きました。

http://www.vbsedit.com/  有償で値段が高い(いずれは無料になるかも。これは便利です。)

何が難しいかというと、WMI が頻繁に出てくるからです。ハードに詳しくないとさっぱり理解できません。

http://www.vbsedit.com/scripts/default.asp

HTAは、VBScript, CScript の延長です。
HTA_helpomatic は、作成ツールですが、今、Microsoft サイトでは見つけられませんでした。HTA Helpomatic Download で手に入りますが、マルウェアがあるサイトもありますから、要注意です。SystemScripter は代わりにはなります。
    • good
    • 0
この回答へのお礼

いつもありがとうございます。
エディタ関係ありがとうございます。まだ使えそうにありませんが。マクロは最初だからエクセルマクロがVBSに名前が変わっただけの、簡単なものを考えてますが、呈示頂いたものはかなり読み取りに時間がかかりそうです。

お礼日時:2016/04/06 04:08

今回、ちょっと関心があったのですが、他のソフトと競合して、VBSEdit というアプリを壊してしまいました。

(VBSEdit というのは、VBSを作成するときの専用エディタです。)

代わりに、今、SystemScripter で作っていますが、これは、シェアウェアが解除になったものの、日本語がうまく入力できません。便利なことは便利です。

牟田口さんのサイトにも出てきています。Debugging Modeで、オブジェクトの中身が取れます。これは、Freeになりました。しかし、若干ハングするようです。
http://www.powertheshell.com/systemscripter-supp …
Continue to use SystemScripter without Activation

最初、HTAファイルで作りたかったのですが、長い間いじったことがないので、当分時間が掛かりそうです。代用品というか、元のVBSで考えてみました。別に、下手の横好きですから、参考にすることもありません。

正規表現は、複数の組みあせがある場合ですね。
例えば、です。→だ。
[tTtT](全角半角まじり)を削除する場合です。
この場合は、Function を設けます。

なお、直接 Notepadを処理するなら、UWSCを使います。これは、Win32 APIを搭載しています。そうでないなら、VBS では、ラッパーを設けます。
http://www.uwsc.info/

ファイル名の指定は、VBSプログラムに、ドラックして重ねますと、実行されます。現在は、拡張子はtxt に限ります。また、バックアップファイルが出ますが、$***.txt となります。ファイルの大きさの制限は、2Gだったような気がしますが、あまり大きなものはやめておいた方が無難です。最終的には、HTAにしたほうが見栄えがよいです。

>編集は始めの2, 3行だけです。
読み落としていました。少し、コードが変わります。

'//--
Dim objFso
Dim BName
Dim delTx
Dim Fname
Dim mPath
Dim objFile
Dim objFName
Dim objTx
Dim objTxIn
Dim orgFName
Dim outTx
Dim Tx

'''FindWdDel.Vbs

Set objFso = CreateObject("Scripting.FileSystemObject")
''------
If WScript.Arguments.length =0 Then
WScript.Echo "ファイルをドラッグして、このプログラムにDropしてください。"
WScript.Quit
End If
''----------
Fname =WScript.Arguments.Item(0)
''テスト用
'' Fname = "C:\Users\[myName]\My Documents\Wsh\test2.txt"

If LCase(objFso.GetExtensionName(Fname)) = "txt" Then
'Rename
orgFName =Fname
Set objFile = objFso.GetFile(FName)
BName = Left(objFile.Name, Len(objFile.Name) - 4)
Fname ="$" & BName & ".txt"
Else
WScript.Echo "拡張子がtxtではありません。"
WScript.Quit
End If
mPath =objFso.GetParentFolderName(objFile.Path) & "\"
If objFso.FileExists(mPath & Fname) Then
Set objFile =objFso.GetFile(mPath & Fname)
''同名バックアップファイルがある時は止める場合
'MsgBox "既に同じ名前のバックアップファイルがあります。" & Fname
'WScript.Quit
objFile.Delete
End If
Set objFile =objFso.GetFile(orgFName)
objFile.Name = Fname
Set objTxIn = objFso.OpenTextFile(objFile.Path)
Tx = objTxIn.ReadAll() 'upto 2G

delTx =InputBox ("削除する文字を入れてください")
Do Until Len(delTx)>0 Or delTx =""
delTx =InputBox ("文字が入っていません。")
Loop
If delTx = "" Then
MsgBox "終了しますします!"
WScript.Quit
End If
On Error Resume Next
outTx = Replace(Tx, delTx, "")
Set objTx =objFso.CreateTextFile(orgFname)
objTx.Write (outTx)
If Err.number > 0 Then
MsgBox Err.number &": " & Err.Description
Else
MsgBox "正常に出力されました。"
End If
'//--
    • good
    • 0

>notepad用のコマンド一覧とかあるのでしょうか。


ありません。
>エクセルVBAはそこそこ出来ます。
なら、エクセルで処理しては如何でしょうか?
テキストファイルをエクセルで開いて
ご希望の編集をして
テキストで保存すれば
同じ形になりませんでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございます。
同じです。ただ、目的はVBS勉強でもありますので、今回はVBS前提で作ります。

お礼日時:2016/04/02 20:10

> 文字列"t"を削除したいのです。



具体的な削除の仕方が不明ですので、ちゃんと明確に記載したほうが良いかと。


ファイル内の全ての"t"を削除するのであれば、メモ帳の置換機能("t"→"")を使えば良いです。
特定の行の削除のみ行いたいのであればメモ帳は使用せずに、対象のテキストファイルを直接一行ずつ読み取って、正規表現で置換("t"→"")すれば良いです。

http://www.kanaya440.com/contents/tips/vbs/004.h …
https://msdn.microsoft.com/ja-jp/library/ms97457 …
    • good
    • 0
この回答へのお礼

再度ありがとうございます。

>対象のテキストファイルを直接一行ずつ読み取って
質問文のURLを調べたところ、ありました。TextStreamで出来るようですね。TestStreamと正規表現で攻めてみます。

お礼日時:2016/04/01 23:28

SendKeysを使用すればキーボードで行うことのできる操作は基本的に全て可能になります。



http://www.atmarkit.co.jp/ait/articles/0407/08/n …
    • good
    • 0
この回答へのお礼

ありがとうございます。
判断が伴う場合はどうですか?具体的には文字列"t"を削除したいのです。内容を読み取りtなら削除、になる筈です。

お礼日時:2016/04/01 19:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!