Вставка текста

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Ответить
vegg
Сообщения: 2
Зарегистрирован: Вт май 10, 2011 15:11

Вставка текста

Сообщение vegg »

Есть около 600 текстовых файлов, нужно вставить в конце каждого файла один и тот же текст.

Каким образом можно это реализовать?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Текст большой? Можно бат-файлом, если не очень большой.

Создать бат-файл с любым именем, перетащить на панель инструментов, в параметрах прописать %WL, выделить на панели все эти 600 файлов и нажать кнопку.

Код: Выделить всё

@echo off
if -%1==-go goto go
if -%1==- echo Params: %%WL & pause & goto :EOF
for /f "usebackq delims=" %%f in (`type %1`) do call %0 go "%%f"
pause
goto :EOF

:go
echo.>>%2
echo.>>%2
echo Первая строка для дописывания к файлам>>%2
echo Вторая строка для дописывания к файлам>>%2
Здесь echo. (без пробела) выводит переход на новую строку, echo с текстом выводит текст, а >>%2 говорит, что текст нужно дописать в конец файла (если знак > только один, то файлы будут очищаться перед выводом текста, что нам не нужно).

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

Код: Выделить всё

@echo off
if -%1==-go goto go
if -%2==- echo Params: %%WL "X:\Path\To\File\With\Text.txt" & pause & goto :EOF
if not exist %2 echo Text file %2 not found! & pause & goto :EOF
for /f "usebackq delims=" %%f in (`type %1`) do call %0 go "%%f" %2
pause
goto :EOF

:go
if exist %3 type %3>>%2
В параметрах кнопки указать %WL "X:\Путь\К\Файлу\С\Дописываемым\Текстом.txt". И не забывать, что если первая строка этого файла не пустая, то текст может дописываться не с новой строки.

Разумеется, перед применением ко своим файлам рекомендую потренироваться на копиях.
Последний раз редактировалось MVV Вт май 10, 2011 15:57, всего редактировалось 1 раз.
vegg
Сообщения: 2
Зарегистрирован: Вт май 10, 2011 15:11

Сообщение vegg »

Сейчас попробую.
текст в 3 строки всего.

Добавлено спустя 8 минут 17 секунд:

Так
а если у меня текст состоит из функций, которые совпадают с функциями батника, в общем вот текст:
<?php add_action('wp_footer', 'mth');
function mth() { $content =' · <a href="http://xxx/" target="_blank">xxx</a> · ';
echo $content;} ?>
Добавлено спустя 4 минуты 46 секунд:

Перетащить на панель инструментов // не совсем понял как это делается.
Аватара пользователя
alexey65536
Сообщения: 1056
Зарегистрирован: Пт янв 20, 2006 10:58
Откуда: Taganrog

Сообщение alexey65536 »

Если там функции совпадают, то 1-й вариант (с текстом в теле батника) работать не будет, а 2-й должен:)
#199018
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Но можно извратиться и вручную замаскировать все служебные символы. :D
Но что второй вариант удобнее - никто и не спорит.

Кстати, %WL в кавычках лучше.

А для TC 7.04a и младше - "%l" вместо "%WL". Но обновить до TC 7.56a тоже стоит.
Последний раз редактировалось MVV Вт май 10, 2011 17:05, всего редактировалось 2 раза.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Похожая задача. Модераторы, м.б. подклеить?
Ну или переименовать, потому что задача всё таки не "вставить" (в середину), а "дописать" (в конец)

vegg
для всех .txt

Код: Выделить всё

for %%a in ("d:\путь\*.txt") do type "d:\добавь меня.txt">>"%%a"
просто запустить батник
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

vegg
vbs:

Код: Выделить всё

'=====================================================
' Добавление нескольких строк в файлы из файла-списка

' Параметры:
' {файл-список}

' Пример параметров при вызове из TC:
' %L
'=====================================================

Dim FSO, F, FF
Set FSO = CreateObject("Scripting.FileSystemObject")

With FSO.OpenTextFile(WScript.Arguments(0), 1)
  Do While Not .AtEndOfStream
    F = Trim(.ReadLine)
    If F <> "" Then
      If FSO.FileExists(F) Then
        Set FF = FSO.OpenTextFile(F, 8, True)
        FF.WriteLine "<?php add_action('wp_footer', 'mth');"
        FF.WriteLine "function mth() { $content =' · <a href=""http://xxx/"" target=""_blank"">xxx</a> · ';"
        FF.WriteLine "echo $content;} ?>"
        FF.Close
      End If
    End If
  Loop
  .Close
End With

Set FF  = Nothing
Set FSO = Nothing
Wscript.Quit()
Содержимое строк указываем внутри скрипта после "FF.WriteLine".
Если в тексте содержатся кавычки, их нужно задвоить (как во второй строке примера).
Нет, я не сплю. Я просто медленно моргаю.
GGS
Сообщения: 322
Зарегистрирован: Сб май 02, 2009 13:00

Сообщение GGS »

Друзья, что-то у вас "глаз замылился".
Создаём файл с добавочным текстом (add) и плюсуем его к имеющемуся
COPY file.ext + add file.ext /B

Организация списка или цикла - по вкусу.
Например, если исходные файлы *.txt:
FOR %i IN (*.txt) DO COPY "%i"+add "%i" /B
при использовании в командном файле %i заменить на %%i т.е. удвоить символ %
Аватара пользователя
Моторокер
Сообщения: 1517
Зарегистрирован: Пт май 06, 2005 08:22
Откуда: г. Пермь (читается Перьмь)
Контактная информация:

Сообщение Моторокер »

Может удобней использовать спец. приложения, например SBReplacer?
плагины для Total Commander, статьи Graphics Converter; NSCopy; SEO HTML; KillOK; Плагин на Delphi
ПармаСруб - строительство домов и бань в Перми
SaDim
Сообщения: 18
Зарегистрирован: Вс май 22, 2011 22:28

Сообщение SaDim »

MVV писал(а):Создать бат-файл с любым именем, перетащить на панель инструментов
Подскажите, пожалуйста, как добавить текст в начало файла?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

SaDim, нужно создавать временную копию обрабатываемого файла, затем копировать на место оригинала файл со вставляемым текстом и дописывать к нему созданную копию - получится, что текст добавлен в начало файла. Временную копию потом удалить.

Что-то вроде:

Код: Выделить всё

@echo off 
if -%1==-go goto go 
if -%2==- echo Params: "%%WL" "X:\Path\To\File\With\Text.txt" & pause & goto :EOF 
if not exist %2 echo Text file %2 not found! & pause & goto :EOF 
for /f "usebackq delims=" %%f in (`type %1`) do call %0 go "%%f" %2 
pause 
goto :EOF 

:go
if not exist %3 goto :EOF
set tmpname=%TEMP%\~tmpfile-%random%~
copy %2 "%tmpname%">nul
copy /b %3 + "%tmpname%" %2>nul
del "%tmpname%"
Перетащить батник на панель инструментов, очистить поле рабочей папки и написать в параметрах "%WL" пробел путь к файлу с вставляемым текстом:

Код: Выделить всё

"%WL" "C:\InsertText.txt"
Ответить