Цитата
D_Master:
Объясню, для чего мне это нужно
Любой язык - [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов
Ясно. Ну тогда всё что могу посоветовать, так это использовать не батник для этого, а, к примеру скриптовый язык
AutoIt
, ну или VBS-ку:
CRLF_Stripper.vbs
Код:
Код: Выделить всё
'===========================================================================================================
' [CRLF Stripper]
' Скрипт позволяющий удалять символы перевода строки и возврата каретки (vbCRLF) на конце или в начале файла.
'
' Синтаксис: "FileName" [/Flag /rTimes]
'
' * FileName - Полный путь до файла назначение.
' * /Flag - Указывает метод удаления vbCRLF.
' 0 убирает в начале файла, 1 на конце, и -1 в начале и на конце.
' * /rTimes - Указывает число удаления vbCRLF (сколько символов vbCRLF удалять. По умолчанию все).
'
' Пример запуска: Wscript.exe CRLF_Stripper.vbs "C:\File.txt" 1 -1
' * Удалит все заверщающие символы перевода строки в файле C:\File.txt.
'
' Автор: G.Sandler
'===========================================================================================================
Const ForReading = 1, ForWriting = 2, ForAppending = 8
QuiteMode = 1
sFilePath = GetParentDir() & "\TextFile.txt"
iRemoveMethod = 1 'Удалять vbCRLF только на конце файла
iRemoveTimes = -1 'Удалять vbCRLF столько раз сколько встретится на конце/в начале файла
'Определяем параметры ком. строки
If WScript.Arguments.Count > 0 Then sFilePath = WScript.Arguments(0)
If WScript.Arguments.Count > 1 Then iRemoveMethod = Int(WScript.Arguments(1))
If WScript.Arguments.Count > 2 Then iRemoveTimes = Int(WScript.Arguments(2))
sFileName = Mid(sFilePath, InStrRev(sFilePath, "\", -1, 1)+1)
'=========================================================
On Error Resume Next
Set oFSO = CreateObject("Scripting.FileSystemObject")
'Проверяем существование файла
If Not oFSO.FileExists(sFilePath) Then
sInitDir = ""
If WScript.Arguments.Count > 0 Then
If QuiteMode = 1 Then Wscript.Quit
MsgBox _
"Файл [" & sFileName & "] не существует. Укажите файл...", _
48, "CRLF Stripper - Ошибка"
sInitDir = Left(sFilePath, InStrRev(sFilePath, "\", -1, 1)-1)
If sInitDir = "" Then sInitDir = GetParentDir()
End If
sFilePath = FileOpenDialog("CRLF Stripper - Укажите файл для обработки", sInitDir, _
"Text Files (*.txt)|*.txt|All Files (*.*)|*.*", sFileName)
If sFilePath = -1 Then Wscript.Quit
If Not oFSO.FileExists(sFilePath) Then
MsgBox _
"Указанный вами файл [" & sFileName & "] не существует." & vbCRLF & vbCRLF & "OK ===> EXIT", _
48, "CRLF Stripper - Ошибка"
Wscript.Quit
End If
sFileName = Mid(sFilePath, InStrRev(sFilePath, "\", -1, 1)+1)
End If
'Открываем файл для *Чтения*
Set oTxtFile = oFSO.OpenTextFile(sFilePath, ForReading)
'Читаем файл
sReadFile = oTxtFile.ReadAll
'Закрываем файл
oTxtFile.Close
'Открываем файл для *Записи*
Set oTxtFile = oFSO.OpenTextFile(sFilePath, ForWriting, True)
'Пишем в файл данные (считанные ранее) без символов перевода строки и возврата каретки (в соответствии с параметрами)
iCounter = 0
Select Case iRemoveMethod
Case 0, -1
Do While Left(sReadFile, 2) = vbCRLF
sReadFile = Right(sReadFile, Len(sReadFile)-2)
iCounter = iCounter + 1
If iRemoveTimes -1 And iCounter = iRemoveTimes Then Exit Do
Loop
End Select
iCounter = 0
Select Case iRemoveMethod
Case 1, -1
Do While Right(sReadFile, 2) = vbCRLF
sReadFile = Left(sReadFile, Len(sReadFile)-2)
iCounter = iCounter + 1
If iRemoveTimes -1 And iCounter = iRemoveTimes Then Exit Do
Loop
End Select
oTxtFile.Write sReadFile
'Закрываем файл
oTxtFile.Close
'Если скрипт был вызван без параметров, выводим сообщение о завершении...
If WScript.Arguments.Count = 0 Or QuiteMode = 0 Then
MsgBox _
"Обработка файла [" & sFileName & "] удачно завершена!", _
64, _
"CRLF Stripper - Сообщение..."
End If
'Функция для получения полного пути родительского каталога
Function GetParentDir()
sPath = WScript.ScriptFullName
GetParentDir = Left(sPath, InStrRev(sPath, "\", -1, 1)-1)
End Function
'Функция для отображения системного диалога выбора файла
Function FileOpenDialog(sTitle, sInitDir, sFilter, sDefaultName)
Set obj = CreateObject("MSComDlg.CommonDialog")
obj.Filter = sFilter
obj.MaxFileSize = 256
obj.DialogTitle = sTitle
obj.FileName = sDefaultName
obj.InitDir= sInitDir
On Error Resume Next
obj.CancelError = True
Err.Clear
obj.ShowOpen
If Err.Number = 32755 Then
'Cancel Pressed
FileOpenDialog = -1
ElseIf Err.Number 0 Then
'Other errors
FileOpenDialog = Err.Number
Else
FileOpenDialog = obj.FileName
End If
End Function
В нашем случае использовать можно так:
Код:
Код: Выделить всё
@Echo Off
Echo C:\WINDOWS> Exe.txt&&Wscript "CRLF_Stripper.vbs" "Exe.txt" 1 -1