Войти

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


spilberg
10-07-2009, 00:01
Нужен батник который сможет удалить строчки из файла a.txt в каждой строчке написано одно и тоже слово COMMAND

Например:
sdfsdf
COMMAND
sdfsdfsd
sdfsdf
sdfsdf
sdf
COMMAND
sdfsdf
sdf
sd
fsdfsdfsd
fsdfs
COMMAND
sdfsdf

А надо чтоб было так:
sdfsdf
sdfsdfsd
sdfsdf
sdfsdf
sdf
sdfsdf
sdf
sd
fsdfsdfsd
fsdfs
sdfsdf

помогите плиииз очень надо((

gora
10-07-2009, 00:21
Попробуйте так:For /F "Delims=" %%I In (a.txt) Do If /I Not %%I==COMMAND Echo %%I>>temp.txt
Copy /y temp.txt a.txt
Del /q temp.txt

Maza Faka
10-07-2009, 08:31
spilberg
gora
Работать с большими файлами этот код будет очень медленно, опять же проблема со спец. символами. Советую использовать SED.EXE (http://gnuwin32.sourceforge.net/packages/sed.htm)

@Echo Off

Sed "/command/Id" test.txt>result.txt

Devils0411
13-07-2009, 23:16
похожая ситуация:
C:\1\Ivanov\tryu.inf
C:\1\Petrov\adjrt.inf
C:\1\Sidorov\ghjdthrf.inf
C:\1\Bidlov\punkt\slkjd32.inf
необходимо:
1\Ivanov
1\Petrov
1\Sidorov
1\Bidlov\punkt

NiOl
14-07-2009, 18:06
Надеюсь, пояснения не нужны...

@Echo off
SetLocal EnableDelayedExpansion
SetLocal EnableExtensions

if "%1"=="" (
Echo Вызов: %0 ТекстовыйФайл КолонокДляУдаления ^(по умолчанию 1^)
Echo Например: %0 MyFileList.txt 3
Echo удалит из файла MyFileList.txt 3 колонки
Goto :eof
)
set P=%2
if "%P%"=="" set P=1
set TF=%~dpn1.tmp

:L01
if not exist "%TF%" Goto L02
set TF=%TF%_
Goto L01
:L02

for /F "usebackq delims=" %%t in (%1) do (
set Line=%%t_
set Line=!Line:~%P%,-1!
echo !Line!>>"%TF%"
)

del /f %1
ren "%TF%" %~nx1

Devils0411
14-07-2009, 18:40
Объяснять то не нужно. В начале то колонки удаляет, потому что они одинаковые, а вот в конце у каждой строки колонки разные, и можно удалить необходимые символы.

gora
14-07-2009, 19:07
Devils0411, попробуйте так:
@Echo Off
Setlocal EnableDelayedExpansion
For /F "Delims=" %%I In (a.txt) Do (
Set Line=%%~dpI
Echo !Line:~3,-1!>>temp.txt
)
Copy /y temp.txt a.txt
Del /q temp.txt
Pause

gora
14-07-2009, 19:41
Похожая ситуация как у афтара, только немного по другому.

1\Ivanov
1\Petrov
1\Sidorov
1\Ivanov
1\Bidlov\punkt

необходим такой вариант

1\Ivanov;1\Petrov;1\Sidorov;1\Bidlov\punkt

Попробуйте так:@Echo Off
Setlocal EnableDelayedExpansion
Set SLine=
For /F "Delims=" %%I In (a.txt) Do (
Set Line=%%~dpI
Set SLine=!SLine!;!Line:~3,-1!
)
Echo !SLine!>>temp.txt
Copy /y temp.txt a.txt
Del /q temp.txt
Pause

amel27
15-07-2009, 13:05
Работать с большими файлами этот код будет очень медленно »так вроде быстрей:FindStr /IVBE "COMMAND" 1.txt >2.txt

Devils0411, случайно не это ищешь? http://forum.oszone.net/post-520629-95.html

Devils0411
15-07-2009, 18:37
amel27, Да подобное этому, только средствами пакетных файлов. Вот здесь (http://forum.oszone.net/post-524645-98.html) CMD-вариант решения проблемы построения OemPnPDriversPath. Только не понятно куда пакетник сохраняет пути?

amel27
16-07-2009, 02:40
не понятно куда пакетник сохраняет пути »на экран выводит, если нужно сохранить в переменную OemPnPDriversPath, заменить последнюю строку на:
Set OemPnPDriversPath=%OemPnPDriversPath:~1%

подобное этому, только средствами пакетных файлов »гм... извиняюсь, по ходу промазал - линк не проверил... впрочем, ты сам нашел :)

Devils0411
17-07-2009, 18:15
SetLocal EnableDelayedExpansion
:: Путь к каталогу с драйверами:
Set ROOT=C:\Drivers

PUSHD %ROOT%
For %%i In ("%ROOT%") Do If Exist %%i (Set ROOT=%%~si&Set $R=%%~nxsi) Else Exit
For /F "Delims=" %%i In ('DIR /B/S/A:D *') DO (
Set $D=%%~si
If Exist !$D!\*.inf Set OemPnPDriversPath=!OemPnPDriversPath!;!$R!!$D:%ROOT%=!
)
Echo %OemPnPDriversPath%>>file.txt


Пару вопросов.
1. Каким образом убрать тильду в некоторых путях? Например (Drivers\BLUETO~1\B;Drivers\MASSST~1\C2)
2. А также хотел узнать, как можно эти пути сохранить в winnt.sif в 37 строку в ковычки то бишь вот сюда( OemPnpDriversPath=""), без затирания ниже написанных строк?

amel27
18-07-2009, 09:56
Devils0411

1. имена каталогов в пути должны соответствовать формату 8.3, иначе будут тильды
2. вместо вставки в середину проще добавить в конец файла две строки типа:
[Unattended]
OemPnPDriversPath="Drivers\BLUETH\B;Drivers\MSST\C2"

Devils0411
18-07-2009, 11:37
amel27, Дык секция [Unattended] находится в середине файла. Если ее перенести, это не повлияет на работу установки?
Да и вот в этом варианте скрипта, собранного по кускам, он не добовляет тильды, но почему то дублирует слово Drivers

amel27
18-07-2009, 15:43
Если ее перенести, это не повлияет на работу установки? »
не повлияет, секции можно бить на нескольких кусков
он не добовляет тильды »
если имя каталога не удовлетворяет требованию 8.3, драйвер может не установиться - приведение к формату 8.3 (с тильдами) было намеренно заложено в самом скрипте

Devils0411
18-07-2009, 15:51
Каким образом можно вставить в конец файла winnt.sif эти строки?

amel27
20-07-2009, 07:34
Devils0411, то же с выводом в файл:
@Echo Off
SetLocal EnableDelayedExpansion

Set ROOT=C:\Drivers
Set WSIF=C:\TEST\winnt.sif

PUSHD %ROOT%
For %%i In ("%ROOT%") Do If Exist %%i (Set ROOT=%%~si&Set $R=%%~nxsi) Else Exit
For /F "Delims=" %%i In ('DIR /B/S/A:D *') DO (
Set $D=%%~si
If Exist !$D!\*.inf Set OemPnPDriversPath=!OemPnPDriversPath!;!$R!!$D:%ROOT%=!
)

Echo [Unattended]>>"%WSIF%"
Echo OemPnPDriversPath="%OemPnPDriversPath:~1%">>"%WSIF%"

Devils0411
20-07-2009, 10:52
Выдал ошибку. Слишком длинная входная строка.

amel27
20-07-2009, 13:46
Devils0411, при какой длине выдает ошибку?.. имей ввиду, что длина OemPnPDriversPath в файле winnt.sif не может быть больше 4096 символов (в твоём файле 8170), т.е. всё "лишнее" будет обрезано, повторюсь - сокращай длину имени каталогов... как это делал Башрат в своих драйверпаках

Devils0411
20-07-2009, 17:49
Спасибо. Сократил длину, и все скопировалось.




© OSzone.net 2001-2012