Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Добавить текст до или после символа

Ответить
Настройки темы
CMD/BAT - Добавить текст до или после символа

Новый участник


Сообщения: 27
Благодарности: 2

Профиль | Отправить PM | Цитировать


Нужны два скрипта, первый должен добавлять указанный текст до определённого символа (напимер "@" или ":"), а второй после этого символа в каждой строке.
Таких символов в строке может быть несколько. Это нужно делать после первого символа в строке, который попадётся

Отправлено: 20:49, 12-02-2023

 

Новый участник


Сообщения: 27
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Serguei Kouzmine:
повершеллом владеете ? »
Ничем не владею, могу только скопировать ваш код и вставить

Цитата YuS_2:
нет ничего зазорного в том, чтобы использовать чужой опыт »
Мне не зазорно, я это не скрываю, что я использовал ваш код. Я не знал, что вас это так сильно заденет. Извините, пожалуйста, что я не указал ссылку на ваш комментарий. Так что мне там вместо "???" надо написать, чтобы в каждой строке до символа "@" (а в другом варианте после символа "@") добавлялся текст, который я укажу

Отправлено: 10:27, 14-02-2023 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1231
Благодарности: 515

Профиль | Отправить PM | Цитировать


Цитата Asdshka:
Ничем не владею, могу только скопировать ваш код и вставить »
В этом случае, лучше прислушаться к тому, что говорю не я один, т.е. описать задачу в целом, а не пытаться решить её отдельными способами.
Цитата Asdshka:
Так что мне там вместо "???" надо написать, чтобы в каждой строке до символа "@" (а в другом варианте после символа "@") добавлялся текст, который я укажу »
Т.е. показать всю задачу желания нет?
Ок. Вот решение, powershell:
Код: Выделить весь код
$fin = 'test.txt'
$fout = 'out.txt'
[char]$p = "@"
$insert = 'добаляемый текст'

$reader = [io.streamreader]::new($fin)
$writer = [io.streamwriter]::new($fout)
while ($reader.peek() -ne -1) {
	$str = $reader.readline()
	$ind = $str.indexof($p)
	if ($ind -ge 0){
		# Текст добавляется ПОСЛЕ первого символа:
		#$writer.writeline($str.insert($ind+1,$insert))
		# Текст добавляется ДО первого символа:
		$writer.writeline($str.insert($ind,$insert))
	} else {$writer.writeline($str)}
}
$reader.dispose();$reader.close()
$writer.dispose();$writer.close()
Символ комментария в строках: "#"
Чтобы текст вставлялся после указанного символа, необходимо закомментировать строку:
Код: Выделить весь код
$writer.writeline($str.insert($ind,$insert))
и раскомментировать строку:
Код: Выделить весь код
$writer.writeline($str.insert($ind+1,$insert))

-------
scio me nihil scire. Ѫ


Отправлено: 12:33, 14-02-2023 | #12


Новый участник


Сообщения: 27
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
Ок. Вот решение, powershell: »
Вы тут все на меня наругались, что я разобрался и в BAT и в PowerShell
Я сделал пару своих вариантов, но они и рядом с твоим не стояли. Могу скинуть, если интересно.

Отправлено: 22:07, 14-02-2023 | #13


Старожил


Сообщения: 250
Благодарности: 51

Профиль | Отправить PM | Цитировать


очень интересно

Отправлено: 03:58, 15-02-2023 | #14


Новый участник


Сообщения: 27
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Serguei Kouzmine:
очень интересно »
Код: Выделить весь код
$inputFile = "C:\path\input.txt"
$outputFile = "C:\path\output.txt"

(Get-Content $inputFile) | ForEach-Object {$_ -replace "@", "asd@"} | Set-Content $outputFile



$input_file = "C:\path\input.txt"
$output_file = "C:\path\output.txt"

Get-Content $input_file | ForEach-Object {
    $parts = $_ -split "@"
    $newLine = $parts[0] + "asd@" + $parts[1]
    $newLine | Add-Content $output_file
}



$inputFile = 'C:\path\input.txt'
$outputFile = 'C:\path\output.txt'

Get-Content $inputFile | ForEach-Object {
    $line = $_
    $pos = $line.IndexOf('@')
    if ($pos -ge 0) {
        $line = $line.Insert($pos + 1, 'asd')
    }
    $line
} | Set-Content $outputFile
Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion

set input_file=input.txt
set output_file=output.txt

(for /f "tokens=1,* delims=@" %%a in (%input_file%) do (echo %%aasd@%%b)) > %output_file%
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:49, 15-02-2023 | #15


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1231
Благодарности: 515

Профиль | Отправить PM | Цитировать


Цитата Asdshka:
Я сделал пару своих вариантов, но они и рядом с твоим не стояли. »
Свои варианты всегда лучше, чем какие-либо другие, даже если они менее оптимальные чем чужие, в плане развития навыков...

Цитата Asdshka:
Могу скинуть, если интересно. »
Показывайте, конечно - подскажем, где и что поправить, если есть ошибки...

-------
scio me nihil scire. Ѫ


Отправлено: 08:01, 15-02-2023 | #16


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1231
Благодарности: 515

Профиль | Отправить PM | Цитировать


Цитата Asdshka:
$_ -replace "@", "asd@" »
Цитата Asdshka:
$_ -split "@" »
Да, можно и так, но с условием, что опорный символ в строке один... если их несколько, то действия будут производиться с каждым. Причем вариант со -split, поломает строки, если опорных символов больше чем один...

в cmd варианте тоже будут проблемы со строками, в которых разделителей нет. В них будет добавляться текст с опорным символом в конец строки...

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:09, 15-02-2023 | #17


Старожил


Сообщения: 250
Благодарности: 51

Профиль | Отправить PM | Цитировать


а как же

Таких символов в строке может быть несколько. Это нужно делать после первого символа в строке, который попадётся ?
ведь жадное

Код: Выделить весь код
' a a a ' -replace 'a', 'b'
 b b b

Отправлено: 06:33, 16-02-2023 | #18


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6680
Благодарности: 1561

Профиль | Отправить PM | Цитировать


Пора обязать авторов тем в этом разделе добавлять примеры. Так надоело уже - задают вопрос, а предмета не предоставляют.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 08:59, 16-02-2023 | #19



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Добавить текст до или после символа

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Обрезать переменную до символа обратной косой черты Steklopaket Скриптовые языки администрирования Windows 10 15-02-2023 09:09
Любой язык - Вырезать начало/ заголовок файла до определённого символа NickM Скриптовые языки администрирования Windows 6 05-03-2022 17:19
CMD/BAT - Сверка 2 текстовых фалов до определенного символа greenco Скриптовые языки администрирования Windows 3 28-07-2016 01:15
Разное - Как измененить или добавить текст в документ при его открытии eboue Microsoft Office (Word, Excel, Outlook и т.д.) 1 02-07-2015 03:19
[решено] Обрезать строку до указанного символа rimm AutoIt 5 25-09-2009 16:32




 
Переход