PDA

Показать полную графическую версию : [решено] Вопрос по редактированию строк


D1kiy
20-01-2017, 16:15
Здравствуйте. Имеется файл с примерным содержанием:
#text
text2
text3
#text4
text5
Мне нужно построчно прочесть файл и если первый символ строки не # записать в другой файл в виде "какой-то_текст строка_из_первого_файла". Тоесть отработав на файле из примера скрипт должен выдать мне:
какой-то_текст text2
какой-то_текст text3
какой-то_текст text5

Я пробую так:
set file=file.txt
for %%i in (%file%) do (
set test=%%i
set var=%package:~0,1%
if not "%var%" == "#" echo "какой-то_текст %test%" >> new_file.txt )
Но ничего не получается. Заранее спасибо за помощь

Elven
20-01-2017, 17:28
for /f %%i in ('findstr /v ^# file.txt') do echo какой-то_текст %%i >> new_file.txt

D1kiy
20-01-2017, 18:02
for /f %%i in ('findstr /v ^# file.txt') do echo какой-то_текст %%i >> new_file.txt »

К сожалению не работает, на выходе пустой файл.

greg zakharov
20-01-2017, 19:57
@echo off
setlocal
set "file=file.txt"
for /f "delims=" %%i in (
'findstr /bvrc:"#" "%file%"'
) do echo:%%i>>out.txt
endlocal
exit /b

Iska
20-01-2017, 20:44
Имеется файл с примерным содержанием: »
Крайне желательно упаковывать образец файла в архив, каковой прикладывать к сообщению.

@echo off
setlocal enableextensions enabledelayedexpansion

>"Result.txt" (
for /f "usebackq eol=# delims=" %%i in ("Sample.txt") do echo Some string %%i
)

endlocal
exit /b 0

Elven
21-01-2017, 11:26
К сожалению не работает, на выходе пустой файл. »
Работает в рамках поставленной задачи в купе с предложенным примером файла. Разве что пробелы в строке не учел, тогда так:
for /f "delims=" %%i in ('findstr /v ^# file.txt') do echo какой-то_текст %%i >> new_file.txt

Крайне желательно упаковывать образец файла в архив, каковой прикладывать к сообщению. »
категорически согласен.

megaloman
21-01-2017, 20:08
Iska, setlocal enableextensions enabledelayedexpansion » Классное решение, но ИМХО, в этом случае это не нужно и даже вредно. Особенно если в тексте есть !

Iska
21-01-2017, 21:19
megaloman, пакетные файлы вообще не особо предназначены для этого. Подводных камней чуть больше, чем дохрена.

alpap
22-01-2017, 03:09
D1kiy,
если предположить на минуту что ваше содержимое может измениться на такое:

#text
text 2&!
(text)3

#text4
;text="5"

то более надежным вариантом будет такой код:

@echo off
set "f=file.txt"
<"%f%">$ (for /f tokens^=1*^ delims^=[] %%a in ('find /n /v ""') do @set "s=[%%a]%%b"& echo "%%b"|>nul findstr /r ^# || cmd/v/c echo какой-то_текст !s:*]^^=!)& >nul move $ "%f%"
exit




© OSzone.net 2001-2012