Войти

Показать полную графическую версию : [решено] Замена окончания строк с CrLf на просто Lf


xGETSx
09-11-2011, 19:30
Есть текстовый файл, нужно проверить в каком он формате(Win или UNIX) и если он в формате Win заменить окончания строк на Lf

Не обязательно средствами только bat, но должна быть возможность запуска из командной строки.

Iska
10-11-2011, 00:58
xGETSx, если устроит WSH:
Option Explicit

Const ForReading = 1
Const ForWriting = 2

Dim strSourceFile
Dim strTempFile
Dim strContent


If WScript.Arguments.Count = 1 Then
strSourceFile = WScript.Arguments.Item(0)
strTempFile = GetTemporaryName()

With WScript.CreateObject("Scripting.FileSystemObject")
If .FileExists(strSourceFile) Then
With .OpenTextFile(strSourceFile, ForReading)
strContent = .ReadAll
.Close
End With

With .OpenTextFile(strTempFile, ForWriting, True)
.Write Replace(strContent, vbCrLf, vbLf)
.Close
End With

.CopyFile strSourceFile, .BuildPath(.GetParentFolderName(strSourceFile), .GetBaseName(strSourceFile) & ".bak"), True
.CopyFile strTempFile, strSourceFile, True
.DeleteFile strTempFile
Else
WScript.Echo "File [" & strSourceFile & "] not found"
End If
End With
Else
WScript.Echo "Usage: " & WScript.ScriptName & " <Path to source file>"
End If

WScript.Quit 0
'=============================================================================

'=============================================================================
' Серый форум / VBScript: генерация пути для временного файла или папки
' (http://forum.script-coding.com/viewtopic.php?id=1221)
'=============================================================================
Function GetTemporaryName()
Const TemporaryFolder = 2

Dim strTempName

With WScript.CreateObject("Scripting.FileSystemObject")
Do
strTempName = .BuildPath(.GetSpecialFolder(TemporaryFolder), .GetTempName)
Loop While .FileExists(strTempName) Or .FolderExists(strTempName)
End With

GetTemporaryName = strTempName
End Function
'=============================================================================
P.S. Файл читается в память целиком, посему для гигабайтных текстовых файлов не очень годится.




© OSzone.net 2001-2012