Если у вас есть доступ к VBA, напишите функцию поиска и замены, которая читает из одного файла и записывает в другой. Обычно я бы использовал FileSystemObject, но он не всегда доступен в контролируемых средах.
Public Sub ReplaceInFile(sOld As String, sNew As String, _
sFind As String, sReplace As String)
'-----------------------------------------------------
' Procedure : ReplaceInFile
' Author : cmsjr
' Date : 9/15/2009
' Purpose : Make up for lack of text manipulation in windows shell
' Sample
' Call ReplaceInFile("C:\DelimisFun.txt", "c:\NewFile2.txt", ",", "," & vbCrLf)
' Parms :
' sOld is the file you want to change
' sNew is the new file, should not be the same as the old ;)
' sFind what you are looking for
' sReplace, what you would like to see instead
'
'------------------------------------------------------------
'
On Error GoTo Error_Proc
Dim lin, lout As Integer 'file handles
Dim strBuff As String 'buffer
If Dir(sOld) = "" Then 'can't read what's not there
MsgBox "Invalid File"
Else
lin = FreeFile
Open sOld For Input As #lin 'open input
lout = FreeFile
Open sNew For Append As #lout 'open output
Do Until EOF(lin) 'loop through file
Line Input #lin, strBuff 'read the old
Write #lout, Replace(strBuff, sFind, sReplace) 'write the new
Loop
End If
Exit_Proc:
Close #lin
Close #lout
Exit Sub
Error_Proc:
MsgBox Err.Description, vbOKOnly
Resume Exit_Proc
End Sub
Подход к файлу с супер злыми битами
Но что, если у нас не было VBA или каких-либо инструментов в стиле * nix. Вот один нецелесообразный способ
Создайте bat-файл, который будет перебирать его параметры командной строки и отображать их в жестко запрограммированный файл. Обратите внимание на использование shift, это сдвигает следующий аргумент командной строки на один индекс (значение $ 2 теперь равно $ 2 и т. Д.), Это работает для нас, потому что файл bat будет игнорировать запятые в аргументах командной строки (для For Обратите внимание, что мы также заменяем запятую, поскольку она была проигнорирована. Я не проверял это на больших наборах данных, он хорошо работал на 2000 строк.
@ ECHO OFF
: Loop
ЕСЛИ "% 1" == "" GOTO Продолжить
echo %1, >> NewFile.txt
SHIFT
GOTO Loop
: Продолжить
Обернуть вызов файла bat в цикл for, поэтому мы в основном передаем каждое значение с разделителями-запятыми в текстовом файле в качестве аргумента командной строки в файл bat.
для / F% x in (delimisfun.txt) do c: \ bats \ winreplace.bat% x