Показать полную графическую версию : [решено] удалить строчки из файла 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
помогите плиииз очень надо((
Попробуйте так: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
Надеюсь, пояснения не нужны...
@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
Объяснять то не нужно. В начале то колонки удаляет, потому что они одинаковые, а вот в конце у каждой строки колонки разные, и можно удалить необходимые символы.
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
Похожая ситуация как у афтара, только немного по другому.
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
Работать с большими файлами этот код будет очень медленно »так вроде быстрей: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. Только не понятно куда пакетник сохраняет пути?
не понятно куда пакетник сохраняет пути »на экран выводит, если нужно сохранить в переменную 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=""), без затирания ниже написанных строк?
Devils0411
1. имена каталогов в пути должны соответствовать формату 8.3, иначе будут тильды
2. вместо вставки в середину проще добавить в конец файла две строки типа:
[Unattended]
OemPnPDriversPath="Drivers\BLUETH\B;Drivers\MSST\C2"
Devils0411
18-07-2009, 11:37
amel27, Дык секция [Unattended] находится в середине файла. Если ее перенести, это не повлияет на работу установки?
Да и вот в этом варианте скрипта, собранного по кускам, он не добовляет тильды, но почему то дублирует слово Drivers
Если ее перенести, это не повлияет на работу установки? »
не повлияет, секции можно бить на нескольких кусков
он не добовляет тильды »
если имя каталога не удовлетворяет требованию 8.3, драйвер может не установиться - приведение к формату 8.3 (с тильдами) было намеренно заложено в самом скрипте
Devils0411
18-07-2009, 15:51
Каким образом можно вставить в конец файла winnt.sif эти строки?
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
Выдал ошибку. Слишком длинная входная строка.
Devils0411, при какой длине выдает ошибку?.. имей ввиду, что длина OemPnPDriversPath в файле winnt.sif не может быть больше 4096 символов (в твоём файле 8170), т.е. всё "лишнее" будет обрезано, повторюсь - сокращай длину имени каталогов... как это делал Башрат в своих драйверпаках
Devils0411
20-07-2009, 17:49
Спасибо. Сократил длину, и все скопировалось.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.