OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

Winでのバッチ処理

  • すぐに回答を!
  • 質問No.158459
  • 閲覧数268
  • ありがとう数3
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 70% (56/79)

CygwinもしくはMS-DOSプロンプトで以下のようなことは出来るでしょうか?

あるディレクトリ内に.docファイルと.txtファイルが複数あり
txtファイルだけを選択して、すべてのtxtファイルに記入されている
dogという単語をcatという単語に書きかえる。

上記のような処理を一括して行うことは可能でしょうか?
済みませんがその方法を教えてください。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル11

ベストアンサー率 49% (139/279)

MS Wordが使えるのでしたら、WSHからWordを使って置換するマクロがありますので、使ってみますか?

ちょっと長いのですが、下記を切り取って「WordRepl.vbs」というファイル名で保存してください。

---------------------------------------------
'
' Wordによる一括置換マクロ
'
Dim objFso
Dim objSubDirs
Dim objDir
Dim objFile
Dim sDir
Dim objWord
Dim sFile
Dim objDoc
Dim ojbFind
Dim sFrom
Dim sTo

' 使い方の表示
If WScript.Arguments.Count < 2 Then
WScript.Echo( "Usage:" + vbCrLf + "CScript WordRepl.vbs 置換対象文字列 置換文字列 [ディレクトリ]")
WScript.Quit
End If

' 変換前文字列
sFrom = WScript.Arguments.Item(0)
' 変換後文字列
sTo = WScript.Arguments.Item(1)

' フォルダの指定
If WScript.Arguments.Count > 2 Then
sDir = WScript.Arguments.item(2)
Else
sDir = "."
End If

' ワードの起動
Set objWord = CreateObject("Word.Application")

' FileSystemObjectの作成
Set objFso = CreateObject("Scripting.FileSystemObject")

' ディレクトリの取得
Set objDir = objFso.GetFolder(sDir)

' 特殊なファイルが混じっているとエラーになることがあるため、
' エラーをトラップしている。
On Error Resume Next

' 正規表現処理のオブジェクト
Set reg = New RegExp

' ファイル名を指定
reg.Pattern = ".*txt$"

' objWord.Visible = true

Err.Clear
For Each objFile In objDir.Files
If Err.Number = 0 Then
If reg.test(objFile.Name) = True Then
if Right(objDir.Path,1) <> "\" Then
sFile = objDir.Path + "\" + objFile.Name
Else
sFile objDir.Path + objFile.Name
End If
On Error Goto 0

' ファイルのオープン
Set objDoc = objWord.Documents.Open( sFile )

' 置換処理
objDoc.Select
Set objFind = objWord.Selection.Find
objFind.Execute sFrom,True,,,,,,,,sTo,2

' ファイルの保存
objDoc.Save

' ファイルのクローズ
objDoc.Close

End If
End If
On Error Resume Next
Next

On Error Goto 0

' あとしまつ
objWord.Quit
Set objWord = Nothing
Set objFile = Nothing
Set reg = Nothing
Set objFolder = Nothing
---------------------------------------------

使い方は、コマンドプロンプトで、

CScript WordRepl.vbs 変換対象の文字列 変換後の文字列 [ディレクトリ名]

です。ディレクトリ名を省略するとカレントディレクトリのファイルについて処理します。

なお、WSHがないと動きません。コマンドプロンプトで、

CScript

として、使い方が出てくれば動くとおもいます。
正規表現を使っているので、Ver.5以上でないと動かないかもしれません。

WSHが入っていない場合は、下記からダウンロードしてください。

http://www.microsoft.com/japan/developer/scripting/default.htm?/Japan/Developer/Scripting/windowshost/download/default.htm
お礼コメント
tanicchi

お礼率 70% (56/79)

ご回答有難うございます。
残念ながらMSWORDを所有しておりませんので上記スクリプトを使用することが出来ませんが、購入する機会がありましたらその際には利用させていただきたいと思います。
投稿日時 - 2001-10-28 19:06:51
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル14

ベストアンサー率 56% (1020/1799)

 sedはどうでしょう。 ...続きを読む
 sedはどうでしょう。
補足コメント
tanicchi

お礼率 70% (56/79)

sedでどのような処理を記述すれば良いのでしょうか?
投稿日時 - 2001-10-28 16:02:38
お礼コメント
tanicchi

お礼率 70% (56/79)

ご協力有難うございます。
また何かありましたらそのときはよろしくお願いします。
投稿日時 - 2001-10-29 02:38:31


  • 回答No.3
レベル11

ベストアンサー率 49% (139/279)

一箇所間違えてました。 reg.Pattern = ".*txt$" は、 reg.Pattern = ".*[tT][xX][tT]$" が正しいので、修正してください。
一箇所間違えてました。

reg.Pattern = ".*txt$"

は、

reg.Pattern = ".*[tT][xX][tT]$"

が正しいので、修正してください。
  • 回答No.4
レベル11

ベストアンサー率 49% (139/279)

そうですかWordが使えないのですか、しかたないですね。 WSHだけのものに改造しました。 使い方は、いっしょです。置換対象文字列に正規表現が使えるようになりました。 えーとマクロのファイル名は、TextRepl.vbsとしてください。 そうそう、ワークとして、元のファイル名の最後に.$$$がついたファイルを同じディレクトリに作成します。たとえば、元のファイルがTest.txtならTe ...続きを読む
そうですかWordが使えないのですか、しかたないですね。
WSHだけのものに改造しました。

使い方は、いっしょです。置換対象文字列に正規表現が使えるようになりました。

えーとマクロのファイル名は、TextRepl.vbsとしてください。

そうそう、ワークとして、元のファイル名の最後に.$$$がついたファイルを同じディレクトリに作成します。たとえば、元のファイルがTest.txtならTest.txt.$$$ができます。このファイルは変換前のファイルがコピーされたものです。

'
' Text一括置換マクロ
'
' 使い方の表示
If WScript.Arguments.Count < 2 Then
WScript.Echo( "Usage:" + vbCrLf + "CScript TextRepl.vbs 置換対象文字列 置換文字列 [ディレクトリ]")
WScript.Quit
End If

' 変換前文字列
sFrom = WScript.Arguments.Item(0)
' 変換後文字列
sTo = WScript.Arguments.Item(1)

' フォルダの指定
If WScript.Arguments.Count > 2 Then
sDir = WScript.Arguments.item(2)
Else
sDir = "."
End If

' FileSystemObjectの作成
Set objFso = CreateObject("Scripting.FileSystemObject")

' ディレクトリの取得
Set objDir = objFso.GetFolder(sDir)

' 特殊なファイルが混じっているとエラーになることがあるため、
' エラーをトラップしている。
On Error Resume Next

' 文字列置換の正規表現の作成
Set regText = New RegExp
regText.IgnoreCase = False
regText.Global = True
regText.Pattern = sFrom

' ファイル名チェックの正規表現の作成
Set reg = New RegExp
reg.IgnoreCase = True
reg.Pattern = ".*TXT$"

Err.Clear
For Each objFile In objDir.Files
If Err.Number = 0 Then
If reg.test(objFile.Name) = True Then
If Right(objDir.Path, 1) <> "\" Then
sFile = objDir.Path + "\" + objFile.Name
Else
sFile = objDir.Path + objFile.Name
End If

sWork = sFile + ".$$$"

Err.Clear
On Error GoTo 0

WScript.Echo (sFile + " 処理中")

' ファイル名に$$$をつけたファイルにコピー
objFso.CopyFile sFile, sWork, True
' ファイルのオープン
Set objFile = objFso.OpenTextFile(sWork, 1)
Set objDest = objFso.OpenTextFile(sFile, 2,True)

' 置換処理
Do Until objFile.AtEndOfStream
sLine = objFile.ReadLine
sLine = regText.Replace( sLine ,sTo)
objDest.WriteLine( sLine )
Loop

objFile.Close
objDest.Close

End If
End If
Next

On Error Goto 0

' あとしまつ
Set objFile = Nothing
Set objDest = Nothing
Set reg = Nothing
Set regText = Nothing
Set objFolder = Nothing
お礼コメント
tanicchi

お礼率 70% (56/79)

有難うございました。
教えていただいたVBSCript本当に助かりました。
複数のフォルダ内にあるファイルに同じような処理を行わなければならない状況にあったため、教えていただいたスクリプトをbatファイルに書きこんで一括して変換することが出来ました。
' 文字列置換の正規表現の作成
の部分を少し修正するだけで、.txtではないテキスト形式のファイルにも使うことが出来そうですね。
これをきっかけにVBSCriptもすこし勉強してみようかなと思いました。
また、何か質問を投げかけた際にはお力添えよろしくお願いします。
投稿日時 - 2001-10-29 02:37:13
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
あなたが体験したトラブルや解決方法を共有しませんか?
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ