【VBScript】コピペでOK!改行コードの一括変換スクリプト


この記事はプロモーションを含みます。

VBScript

ホーム > VBScript 逆引きリファレンス

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つにまとめてもいいかもしれません。
色々カスタマイズして活用してみて下さい。

また、本スクリプトで使用している機能については下記でも解説していますので、参考にしていただければ幸いです。

コメント

タイトルとURLをコピーしました