VBScriptで、指定フォルダ配下にあるファイルの改行コードを変換する(LF → CRLF・CRLF → LF)スクリプトをご紹介します。
はじめに
今回ご紹介するのは、指定したフォルダ配下にある全てのファイルの改行コードを変換するスクリプトになります。
改行コードを変換する方式として、下記の2パターンのものを用意しています。
- LF を CRLF に変換する
- CRLF を LF に変換する
使用方法は、下記の定数を設定し、実行するだけです。
定数名 | 説明 | 設定例 |
---|---|---|
INPUT_PATH | 変換元ファイルの格納パスを設定する | C:\ws\Input |
OUTPUT_PATH | 変換後のファイルを出力するパスを設定する | C:\ws\Output |
LF を CRLF に変換する
LF を CRLF に変換するソースコードになります。
Option Explicit
' 変換元ファイルの格納パス
Const INPUT_PATH = "C:\ws\Input"
' 変換後のファイルの出力先パス
Const OUTPUT_PATH = "C:\ws\Output"
' ファイルシステムオブジェクトの作成
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
' 変換ファイル情報格納配列
Dim fileList()
ReDim fileList(0)
' ファイル情報の取得
Call GetFileList(fso.GetFolder(INPUT_PATH), fileList)
' 変換処理
Call ExecConvert()
' ファイルシステムオブジェクトの破棄
Set fso = Nothing
' 処理終了
WScript.Quit
' ファイル情報の取得関数
Function GetFileList(ByVal targetPath, ByRef fileList)
Dim folder, file
' サブフォルダの探索
For Each folder In targetPath.SubFolders
Call GetFileList(folder, fileList)
Next
' 変換ファイルのフルパスを配列に格納
For Each file In targetPath.Files
If(fileList(0)="")Then
fileList(UBound(fileList)) = file
Else
ReDim Preserve fileList(UBound(fileList) + 1)
fileList(UBound(fileList)) = file
End If
Next
End Function
' 変換処理関数
Function ExecConvert()
Dim file, inputFile, outputFile
For Each file In fileList
' 変換元ファイルの読み込み
Set inputFile = fso.OpenTextFile(file, 1)
' 変換後ファイル出力先フォルダの作成
Call MakeFolder(file)
' 変換後ファイルの作成
Set outputFile = fso.OpenTextFile(Replace(file, INPUT_PATH, OUTPUT_PATH), 2, True)
' 改行コードの置換
outputFile.Write Replace(inputFile.ReadAll, vbLf, vbCrLf)
inputFile.Close
outputFile.Close
Set inputFile = Nothing
Set outputFile = Nothing
Next
End Function
' フォルダ作成関数
Function MakeFolder(ByVal folderPath)
Dim folderList
folderList = Split(Replace(folderPath, INPUT_PATH, ""), "\")
Dim makeFolderPath
makeFolderPath = OUTPUT_PATH
Dim i
For i = 0 To UBound(folderList) - 1
' 作成するフォルダのパスを生成
makeFolderPath = makeFolderPath & "\" & folderList(i)
' フォルダが存在しない場合のみフォルダを作成する
If Not (fso.FolderExists(makeFolderPath)) Then
' フォルダの作成
fso.CreateFolder(makeFolderPath)
End If
Next
End Function
リンク
CRLF を LF に変換する
CRLF を LF に変換するソースコードになります。
Option Explicit
' 変換元ファイルの格納パス
Const INPUT_PATH = "C:\ws\Input"
' 変換後のファイルの出力先パス
Const OUTPUT_PATH = "C:\ws\Output"
' ファイルシステムオブジェクトの作成
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
' 変換ファイル情報格納配列
Dim fileList()
ReDim fileList(0)
' ファイル情報の取得
Call GetFileList(fso.GetFolder(INPUT_PATH), fileList)
' 変換処理
Call ExecConvert()
' ファイルシステムオブジェクトの破棄
Set fso = Nothing
' 処理終了
WScript.Quit
' ファイル情報の取得関数
Function GetFileList(ByVal targetPath, ByRef fileList)
Dim folder, file
' サブフォルダの探索
For Each folder In targetPath.SubFolders
Call GetFileList(folder, fileList)
Next
' 変換ファイルのフルパスを配列に格納
For Each file In targetPath.Files
If(fileList(0)="")Then
fileList(UBound(fileList)) = file
Else
ReDim Preserve fileList(UBound(fileList) + 1)
fileList(UBound(fileList)) = file
End If
Next
End Function
' 変換処理関数
Function ExecConvert()
Dim file, inputFile, outputFile
For Each file In fileList
' 変換元ファイルの読み込み
Set inputFile = fso.OpenTextFile(file, 1)
' 変換後ファイル出力先フォルダの作成
Call MakeFolder(file)
' 変換後ファイルの作成
Set outputFile = fso.OpenTextFile(Replace(file, INPUT_PATH, OUTPUT_PATH), 2, True)
' 改行コードの置換
outputFile.Write Replace(inputFile.ReadAll, vbCrLf, vbLf)
inputFile.Close
outputFile.Close
Set inputFile = Nothing
Set outputFile = Nothing
Next
End Function
' フォルダ作成関数
Function MakeFolder(ByVal folderPath)
Dim folderList
folderList = Split(Replace(folderPath, INPUT_PATH, ""), "\")
Dim makeFolderPath
makeFolderPath = OUTPUT_PATH
Dim i
For i = 0 To UBound(folderList) - 1
' 作成するフォルダのパスを生成
makeFolderPath = makeFolderPath & "\" & folderList(i)
' フォルダが存在しない場合のみフォルダを作成する
If Not (fso.FolderExists(makeFolderPath)) Then
' フォルダの作成
fso.CreateFolder(makeFolderPath)
End If
Next
End Function
リンク
おわりに
記事は以上です。今回は、LFとCRLFを相互に変換するスクリプトをご紹介しました。
この2つのスクリプトですが、差異は1行だけなので、1つにまとめてもいいかもしれません。
色々カスタマイズして活用してみて下さい。
また、本スクリプトで使用している機能については下記でも解説していますので、参考にしていただければ幸いです。
コメント