Показать полную графическую версию : [решено] как добавить несколько строк в кучу *.txt файлов
minutka15
16-10-2022, 19:20
Имеется более 100 текстовых файлов в C:\Folder\*.txt
В них имеется текст максимум до 7 строчки, в низу все пусто.
Нужно добавить в 8ю и 9ю строчку определенный текст
В нужной директории и в нужном файле закидывая в ту папку батник и запуская его там я добавлял нужную мне строчку (строчки) таким путем
powershell "$f=(Get-Content file.txt);$f[8]='My-New-Text';$f | set-content file.txt"
таким путем я добавляю My-New-Text в 8ю строчку.
Как переделать скрипт что-бы он обработал таким путем все *.txt файлы в (C:\Folder\*.txt)
Буду очень признателен за помощь
DJ Mogarych
16-10-2022, 19:56
"Восьмая строка
Девятая строка" |Add-Content "C:\Folder\*.txt"
minutka15
16-10-2022, 20:10
Девятая строка" |Add-Content "C:\Folder\*.txt"
Речь не о 9й строчке
Как переделать скрипт что-бы он обработал таким путем все *.txt файлы в (C:\Folder\*.txt)
У текстовых файлов разные имена
а что-бы просто добавить нужные строчки в известном файле можно просто продублировать
powershell "$f=(Get-Content file1.txt);$f[8]='тут первый текст';$f | set-content file1.txt"
powershell "$f=(Get-Content file1.txt);$f[9]='тут второй текст';$f | set-content file1.txt"
powershell "$f=(Get-Content file1.txt);$f[10]='тут третий текст';$f | set-content file1.txt"
вопрос был в другом
DJ Mogarych
16-10-2022, 20:32
В моём примере добавляется сразу две строки и сразу во все файлы.
minutka15
17-10-2022, 03:11
DJ Mogarych,
В моём примере добавляется сразу две строки и сразу во все файлы.
Ничего не добавляется:
Нашел рабочий метод. Может кому понадобится...
Get-ChildItem C:\Folder\*.txt |
ForEach-Object {
$f = ($_ | Get-Content -ReadCount 0)
$f[7] = 'я восьмой текст'; $f[8] = 'я девятый текст'
Set-Content $_.FullName $f
}
тем самым заполняем все текстовые файлы из C:\Folder
я восьмой текст
я девятый текст
Еще один код который можно использовать на все случаи жизни
Get-ChildItem -Path 'C:\Folder' -Filter '*.txt' | ForEach-Object {
$LineIndex = 0
$FileContent = Switch -File $_.FullName {Default {
$LineIndex++
If ($LineIndex -Eq 8) {@'
тут строка 8
тут строка 9
тут строка 10
тут строка 11
тут строка 12 # и т.д
'@}
$_}}
Set-Content -Path $_.FullName -Value $FileContent}
Только следует обратить внимание на то, что эти оба варианта не вставляют новые строки,
а только обновляют (меняют) существующие.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.