Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] удалить строчки из файла a.txt (http://forum.oszone.net/showthread.php?t=144664)

spilberg 10-07-2009 00:01 1163401

[решено] удалить строчки из файла a.txt
 
Нужен батник который сможет удалить строчки из файла 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 1163409

Попробуйте так:
Код:

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 1163540

spilberg
gora
Работать с большими файлами этот код будет очень медленно, опять же проблема со спец. символами. Советую использовать SED.EXE
Код:

@Echo Off

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


Devils0411 13-07-2009 23:16 1166842

похожая ситуация:
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 1167558

Надеюсь, пояснения не нужны...

Код:

@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 1167590

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

gora 14-07-2009 19:07 1167615

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 1167662

Цитата:

Цитата Devils0411
Похожая ситуация как у афтара, только немного по другому.

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 1168212

Цитата:

Цитата Maza Faka
Работать с большими файлами этот код будет очень медленно »

так вроде быстрей:
Код:

FindStr /IVBE "COMMAND" 1.txt >2.txt
Devils0411, случайно не это ищешь? http://forum.oszone.net/post-520629-95.html

Devils0411 15-07-2009 18:37 1168606

amel27, Да подобное этому, только средствами пакетных файлов. Вот здесь CMD-вариант решения проблемы построения OemPnPDriversPath. Только не понятно куда пакетник сохраняет пути?

amel27 16-07-2009 02:40 1168962

Цитата:

Цитата Devils0411
не понятно куда пакетник сохраняет пути »

на экран выводит, если нужно сохранить в переменную OemPnPDriversPath, заменить последнюю строку на:
Код:

Set OemPnPDriversPath=%OemPnPDriversPath:~1%
Цитата:

Цитата Devils0411
подобное этому, только средствами пакетных файлов »

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

Devils0411 17-07-2009 18:15 1170758

Код:

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 1171197

Devils0411

1. имена каталогов в пути должны соответствовать формату 8.3, иначе будут тильды
2. вместо вставки в середину проще добавить в конец файла две строки типа:
Код:

[Unattended]
OemPnPDriversPath="Drivers\BLUETH\B;Drivers\MSST\C2"


Devils0411 18-07-2009 11:37 1171236

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

amel27 18-07-2009 15:43 1171351

Цитата:

Цитата Devils0411
Если ее перенести, это не повлияет на работу установки? »

не повлияет, секции можно бить на нескольких кусков
Цитата:

Цитата Devils0411
он не добовляет тильды »

если имя каталога не удовлетворяет требованию 8.3, драйвер может не установиться - приведение к формату 8.3 (с тильдами) было намеренно заложено в самом скрипте

Devils0411 18-07-2009 15:51 1171354

Каким образом можно вставить в конец файла winnt.sif эти строки?

amel27 20-07-2009 07:34 1172464

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 1172559

Выдал ошибку. Слишком длинная входная строка.

amel27 20-07-2009 13:46 1172702

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

Devils0411 20-07-2009 17:49 1172912

Спасибо. Сократил длину, и все скопировалось.


Время: 04:05.

Время: 04:05.
© OSzone.net 2001-