2010-08-31 3 views
1

У меня есть некоторые файлы, которые содержат некоторые, если не все из следующих действий:.bat Найти и Заменить текст

Программа RxBIN RXPCN RxGroup MemberID

не все файлы будут иметь все эти заголовки, но те, которые мне нужно будет заменить, так это выглядит следующим образом:

@Program @RxBIN @RXPCN @RxGroup @MemberID

Спасибо заранее, Джо

+0

Я не совсем понимаю, какова ваша цель. Можете ли вы быть более конкретным? – Nate

+0

Джо, вы спросили об этом на http://www.dostips.com/?t=Batch.FindAndReplace - и там, кажется, есть отличное решение, размещенное там (это непросто, я бы использовал gVim, vim или специальное приложение для поиска/замены). – Rudu

+0

я экспортируемые из Excel в текст с разделителями (.txt) первой строке текстового файла У меня есть все или некоторые из следующих действий в первой строке: Программа RxBIN RXPCN RxGroup MemberID то, что мне нужно сделать чтобы они читались как: @Program @RxBIN @RXPCN @RxGroup @MemberID Мне нужно найти с первой строки «Программа» и заменить на «@Program» и так далее. Заранее благодарен, Joe – jmituzas

ответ

2

Я бы все же был склонен идти с инструментом, созданным для этой цели: Batch Replacer, кажется, идеально подходит для счета.

Но если ты мертв набор на него ... что-то, используя старую repl.bat с несколькими агд парсер ... это становится немного монстра, используя команду DEBUG но вот окончательный шедевр:

Исходный код:mmrepl.bat

@ECHO OFF 
setLocal EnableDelayedExpansion 

::: mmrepl - Replaces one or more strings with others, in file(s) 
::: 
::: syntax: mmrepl.bat $file $find $replace [$find $replace] ... 
:::   $file [in] - file to be parsed 
:::   $find [in] - string to find 
:::   $replace [in] - string to replace with 
::: 
:::   * $find & $replace should be supplied in pairs, n multiples allowed 
:::   * $file can be a single file (eg.txt) or a file filter (*.txt) 
:::   you can supply any command that works with 'dir /b $file' 
:::   so paths and drives are also valid. 
:::   * $find,$replace strings can be single words, or strings enclosed 
:::   in quotes (which will be stripped) 
if "%~1"=="" findstr "^:::" "%~f0"&GOTO:EOF 
if not exist %1 echo No files matching %1 found&GOTO:EOF 

::Creates the following log file: 
set log=%0.log 
::Temporarily creates the following files but cleans up 
set replscr=TEMPDEBUG.SCR 
set cmplsrc=TEMPEDLN.SCR 

echo To see the work of %0.bat view the log file %log% 
echo Multi-Multi Replacement (%0.bat)>%log% 
echo.>>%log% 
set "files=%1" 
shift 
set mmreplcmd= 
:: Pair up find/replaces 
:strippairs 
set p1=%1 
set p1=!p1:"=! 
set p2=%2 
set p2=!p2:"=! 
SET mmreplcmd=%mmreplcmd%'1R%p1%' 1A '%p2%' 0D 0A 
echo Replacing "%p1%" with "%p2%" >> %log% 
shift 
shift 
if "%~1" neq "" goto:strippairs 

::Build script 
echo N%cmplsrc% > %replscr% 
echo E CS:100 %mmreplcmd%'E' 0D 0A>> %replscr% 
echo RCX >> %replscr% 
echo 40 >> %replscr% 
echo W >> %replscr% 
echo Q >> %replscr% 
DEBUG < %replscr% > NUL 
::Execute on files 
for /f %%a IN ('dir /b %files%') do (
    echo.>>%log% 
    echo *** File: %%a >> %log% 
    EDLIN %%a < %cmplsrc% >> %log% 
) 
DEL %replscr% 
DEL %cmplsrc% 

Примечание: мне пришлось удалить "содержится" в поиске repl.bat, потому что вы добавляете амперсанд к каждому заголовку, поэтому он всегда содержит ... мое тестирование показывает, что это отлично работает, но YMMV (тест).

+0

Wow thanks alot! Отлично работает. – jmituzas

1

Это может быть сделано с тривиальным sed (s Tream ред itor), которая доступна для Windows, в severalplaces.

Это может быть сделано с чем-то вроде

sed -e "s/\(Program\|RxBIN\|RXPCN\|RxGroup\|MemberID\)/@\1/g" myfile.txt > newfile.txt 

Это регулярное выражение, которое в основном говорит «заменить на слово„Программы“или„RxBIN“или„RXPCN“или„RxGroup“или„MemberID“ , знак «at» и любое слово, которое было согласовано ».

Существует множество отличных команд Unix, перенесенных в Windows, которые могут быть чрезвычайно полезными.

+0

Обычно в этих случаях используются инструменты, созданные с помощью Unix, особенно если вы не хотите «перематывать свои собственные» с помощью Java или C#. –

Смежные вопросы