Простой пакетный поиск и замена скрипта - PullRequest
0 голосов
/ 06 июля 2011

У меня мало времени, и я хочу создать очень простой пакетный скрипт, который будет:

1) Переименовать строку в другом файле в том же каталоге (имя файла известно) Пример: замените «[replace_me_with_path_to_second_file]» на «current_working_directory / second_file.txt» в first_file.txt

2) Открыть / выполнить этот файл "first_file.txt"

3) закрыть

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 08 июля 2011

Спасибо, Альберге, я надеялся найти решение, которое не требовало бы использования sed, поскольку этот пакетный файл будет использоваться в загруженном файле в среде Windows для упрощения настройки. Но, похоже, мне придется упаковать его: http://gnuwin32.sourceforge.net/packages/sed.htm

Что касается остальных из вас, вся предпосылка совместного каталога вопросов / ответов подразумевает, что человек, задающий вопрос, является либо: 1) не может найти ответ 2) не хватает времени и ищет совета у тех, кто обладает большим опытом или знаниями в данной области.

Критиковать меня за то, что я задаю вопрос, потому что я ограничен во времени, несколько грубо.


Оказывается, что зависимости sed (dll) немного тяжелы, поэтому я нашел этот полезный и компактный скрипт vbs для эмуляции s / r - Есть ли подобная sed утилита для cmd.exe

Я опубликую это здесь:

Dim pat, patparts, rxp, inp
pat = WScript.Arguments(0)
patparts = Split(pat,"/")
Set rxp = new RegExp
rxp.Global = True
rxp.Multiline = False
rxp.Pattern = patparts(1)
Do While Not WScript.StdIn.AtEndOfStream
inp = WScript.StdIn.ReadLine()
WScript.Echo rxp.Replace(inp, patparts(2))
Loop

И мой готовый пакетный скрипт:

@echo off

set full_path=%CD%\file_1.txt
set input_file=file_2.txt
set output_file=file_2.txt

set str_search=FIND_ME
set str_replace=%full_path%

if not exist "%full_path%" (echo this file does not exist...)&goto :eof

cscript //nologo sed.vbs s/%str_search%/"%str_replace%"/ <%input_file% >%output_file%

Работает как шарм:)

0 голосов
/ 06 июля 2011

Это идеальная работа для sed, если вы знакомы с регулярными выражениями.Sed использует «/» в качестве разделителя между выражением, которое нужно найти, и его заменой, поэтому вы должны избегать любых косых черт в пути к файлу.Чтобы использовать ваш пример:

sed -i 's/replace_me_with_path_to_second_file/current_working_directory\/second_file.txt/' first_file.txt
...