Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 7

Автор: wolf0425
Дата сообщения: 03.01.2010 22:44
подскажите как попроще вывести в консоль/файл строки file.txt
начиная от последней строки содержащей string1 до конца файла
Автор: mugil_cephalus
Дата сообщения: 04.01.2010 08:27
wolf0425
for /f "tokens=*" %%i in ('type file ^|find /i /n "string1"') do for /f "tokens=1 delims=[]" %%a in ('echo %%i') do set "skip=%%a"
set /a skip-=1
for /f "tokens=* skip=%skip%" ...
Автор: 01MDM
Дата сообщения: 04.01.2010 09:21
wolf0425

Код:
@echo off
setlocal

for /f "tokens=1 delims=:" %%i in ('findstr /n /c:"string 1" 1.txt') do set /a n=%%i-1
more +%n% 1.txt
Автор: mugil_cephalus
Дата сообщения: 04.01.2010 10:11
niko7
http://forum.ru-board.com/topic.cgi?forum=62&topic=17154&start=0&limit=1&m=4#1
Автор: win2005
Дата сообщения: 04.01.2010 10:16
Ребята подскажите, есть текстовый файл с линками
например:

http://infanata.ifolder.ru/control/?file_id=13952293&code=05f9110efcd952dc12763282207a7dbe
http://infanata.ifolder.ru/control/?file_id=12966438&code=cd0626316ea0d89234d8fa5e26966cac
http://infanata.ifolder.ru/control/?file_id=13866537&code=f387209c083d6e5557323daa3cb3b4bd

Нужно привести к виду:

title1=http://infanata.ifolder.ru/control/?file_id=13952293&code=05f9110efcd952dc12763282207a7dbe
title2=http://infanata.ifolder.ru/control/?file_id=12966438&code=cd0626316ea0d89234d8fa5e26966cac
title3=http://infanata.ifolder.ru/control/?file_id=13866537&code=f387209c083d6e5557323daa3cb3b4bd

Заранее спасибо
Автор: 01MDM
Дата сообщения: 04.01.2010 10:34
win2005

Код:
@echo off
setlocal

for /f "tokens=*" %%i in ('type 1.txt') do call:cnt "%%i"
move 1.tmp 1.txt
goto:eof

:cnt
set /a cnt+=1
1>>1.tmp echo title%cnt%=%~1
Автор: win2005
Дата сообщения: 04.01.2010 10:44
01MDM Спасибо большое
Автор: mugil_cephalus
Дата сообщения: 04.01.2010 11:19
01MDM

Код: set "cnt=1"
for /f "tokens=*" %%A in ('"type x:\file.txt"') do call:_1 "%%A"
set var=
del /q x:\file.txt
ren x:\file1.txt file.txt
pause
goto :eof

:_1
set "var=%~1"
1>>x:\file1.txt echo title%cnt%=%var%
set /a cnt+=1
goto :eof
Автор: win2005
Дата сообщения: 04.01.2010 11:35
Да я вначале, не заметил что в готовом файле линк обрезается типа

title1=http://infanata.ifolder.ru/control/?file_id=13952293
title2=http://infanata.ifolder.ru/control/?file_id=12966438
title3=http://infanata.ifolder.ru/control/?file_id=13866537
Автор: mugil_cephalus
Дата сообщения: 04.01.2010 12:22
win2005
попробуй

Код: set "cnt=1"
for /f "tokens=*" %%A in ('"type x:\file.txt"') do call:_1 "%%A"
set var=
del /q x:\file.txt
ren x:\file1.txt file.txt
goto :eof

:_1
set "var=%~1"
0>nul 1>>x:\file1.txt set /p="title%cnt%=%var%"
1>>x:\file1.txt echo.
set /a cnt+=1
goto :eof
Автор: win2005
Дата сообщения: 04.01.2010 12:53
Спасибо всем за соучастие... Заработало
Автор: 01MDM
Дата сообщения: 04.01.2010 13:08
win2005

Цитата:
Да я вначале, не заметил что в готовом файле линк обрезается типа

Я тоже не заметил:

Код:
Код:
@echo off
setlocal

for /f "tokens=*" %%i in ('type 1.txt') do call:cnt "%%i"
move 1.tmp 1.txt
goto:eof

:cnt
set /a cnt+=1
set "var=%~1"
set "var=%var:&=^&%"
1>>1.tmp echo title%cnt%=%var%
Автор: freezeg
Дата сообщения: 05.01.2010 13:52
Сорри если вопрос задавали.
Имеем строки в виде
-02.04.2009 07:15:11 "S0MUJDXXXX" "XcXz" 10.41.180.238 43200 " #Blabla"
Все они разные, совпадает только в этом тексте начало ип адреса 10.4
Требуется из всех строк собрать базу ипшников в другой файл и никакой не нужной информации больше.
Автор: wolf0425
Дата сообщения: 05.01.2010 16:50
freezeg
Цитата:
Все они разные, совпадает только в этом тексте начало ип адреса 10.4
все разные - это у всех текст в пределах формата (количество полей, разделенных пробелами) разный или они все совсем разные и ip ловить надо только по " 10.4"?
sed -r -n "s/.* (10\.4[0-9.]*).*/\1/gp" file.txt >iplist.txt

а если просто пятое поле выдрать в файл - то можно и без sed,
for /f "tokens=5" %%a in ( file.txt ) do 1>>iplist.txt echo %%a
Автор: Kirillhome
Дата сообщения: 05.01.2010 21:38
niko7

Цитата:
Подскажите, нужно получать вчерашнюю дату. Сделал так:
set /a da = %date:~0,2%
set /a ok = da -1
Проблема в том, что первое число каждого месяца минус 1 получается 0, а надо последнее
число месяца. Может есть какой-нибудь красивый способ .


Был такой вариант (работает корректно для даты в формате dd/mm/yyyy)
(насколько красиво - решать не мне )
Он (мой вариант), БЕЗ УЧЁТА ВИСОКОСНЫХ ГОДОВ!!! - в шапке (см. работа с текстом, датами и файлами).
Там же есть и более красивый вариант - с учётом високосных годов.
Автор: Kirillhome
Дата сообщения: 06.01.2010 01:52
Благодаря подсказкам из "шапочного раздела"
от evgeni666 -
· Использование даты на день раньше чем сегодня (учитываются високосные годы)
и от igor_andreev -
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек)

"родился" такой вариант (не зависит от формата даты, учитывает високосные годы, можно как прибавлять, так и убавлять передаваемое в качестве параметра количество дней к текущей дате)
[more]
Код:
@echo off
if "%1"=="" goto :_NO_ARG
if %1 GTR 40000 goto :_ERR_BIG
if %1 LSS -40000 goto :_ERR_SMALL
rem определим, сколько вычитаем....
Set /A Day_minus=%1
if %Day_minus% GTR 0 echo Вычитаем %Day_minus%
if %Day_minus% LEQ 0 echo Вычитаем %Day_minus% (ну, т.е. прибавляем )

echo.>"%TEMP%\~.ddf"
makecab /D RptFileName="%TEMP%\~.rpt" /D InfFileName="%TEMP%\~.inf" -f "%TEMP%\~.ddf">nul

rem Определим current-date в формате ГГГГ-Месяц(прописью)-День
for /f "tokens=4,5,7" %%a in ('type "%TEMP%\~.rpt"') do if not defined current-date set "current-date=%%c-%%a-%%b"
rem Если нужно - определим день недели (Mon, Thu и т.д.)
rem for /f "tokens=3" %%a in ('type "%TEMP%\~.rpt"') do if not defined weekday set "weekday=%%a"
del /q "%TEMP%\~.*"

for /f "delims=- tokens=1,2,3" %%i in ("%current-date%") do call :getpackage %%i %%j %%k

rem Собственно, значения....
echo %year%
echo %month%
echo %day%
echo package=%package%
goto :EOF

:_NO_ARG
echo Нет аргумента ... Не буду считать
goto :EOF

:_ERR_BIG
echo выбранное значение %1 больше 40'000 ... Не буду считать
goto :EOF

:_ERR_Small
echo выбранное значение %1 меньше -40'000 ... Не буду считать
goto :EOF


:getpackage

set day=%3
set month=%2
set /a year=%1

rem Преобразуем месяц в число

if /i "%month%"=="Jan" set /a month=1
if /i "%month%"=="Feb" set /a month=2
if /i "%month%"=="Mar" set /a month=3
if /i "%month%"=="Apr" set /a month=4
if /i "%month%"=="May" set /a month=5
if /i "%month%"=="Jun" set /a month=6
if /i "%month%"=="Jul" set /a month=7
if /i "%month%"=="Aug" set /a month=8
if /i "%month%"=="Sep" set /a month=9
if /i "%month%"=="Oct" set /a month=10
if /i "%month%"=="Nov" set /a month=11
if /i "%month%"=="Dec" set /a month=12

set lastdays="31 28 31 30 31 30 31 31 30 31 30 31"
if %day% leq 9 set /a day=%day:~-1%
set /a day=%day%-%Day_minus

rem @echo on
if %Day_minus% GTR 0 GOTO :_PRV_MINUS
if %Day_minus% LEQ 0 GOTO :_PRV_PLUS
rem @echo off

rem организуем цикл, пока день меньше нуля
:_PRV_MINUS
if %day% LEQ 0 set /a month-=1
if "%month%"=="0" set /a month=12,year-=1
set /a isleap="(year%%4)&((year%%100)|(year%%400))"
if "%isleap%"=="0" (
set lastdays=%lastdays:28=29%
) else (
set lastdays=%lastdays:29=28%
)
if %day% LEQ 0 for /f "tokens=%month%" %%i in (%lastdays%) do set /a day=%%i+%day%
if %day% LEQ 0 GOTO :_PRV_MINUS
GOTO :_PRV_END

rem организуем цикл, пока день больше последнего в месяце
:_PRV_PLUS
set /a isleap="(year%%4)&((year%%100)|(year%%400))"
if "%isleap%"=="0" set lastdays=%lastdays:28=29%
for /f "tokens=%month%" %%i in (%lastdays%) do set /a lastdaym=%%i
if %day% GTR %lastdaym% set /a month+=1
if %day% GTR %lastdaym% set /a day=%day%-%lastdaym%
if "%month%"=="13" set /a month=1,year+=1
set /a isleap="(year%%4)&((year%%100)|(year%%400))"
if "%isleap%"=="0" (
set lastdays=%lastdays:28=29%
) else (
set lastdays=%lastdays:29=28%
)
for /f "tokens=%month%" %%i in (%lastdays%) do set /a lastdaym=%%i
if %day% GTR %lastdaym% GOTO :_PRV_PLUS

:_PRV_END
if %day% leq 9 set day=0%day%
if %month% leq 9 set month=0%month%
set package=%year%-%month%-%day%
Автор: freezeg
Дата сообщения: 06.01.2010 05:47
wolf0425
Спасибо. Все работает.
Автор: Pacho
Дата сообщения: 06.01.2010 21:47
Нужно "прошуршать" раздел реестра HKLM\Software\Classes\ по всем расширениям файлов на предмет того, что у них записано в параметре по умолчанию. Для одного расширения пишу так:

Код: @FOR /F "skip=2 tokens=3,* usebackq" %%i IN (`Reg Query HKLM\Software\Classes\.zip /ve`) DO @ECHO "%%j"
Автор: Kirillhome
Дата сообщения: 07.01.2010 03:46
Pacho
Примерно так....


Код:
@echo off
if exist all_key.txt del all_key.txt
if exist keyl_err.txt del key_err.txt
Reg Query HKLM\Software\Classes\ /s > All_Reg.txt
for /f "tokens=4,5 delims=\" %%a in ('FIND /I "HKEY_LOCAL_MACHINE\Software\Classes\\." All_Reg.txt') Do Call :Prv %%a %%b
if exist All_Reg.txt del All_Reg.txt
if exist 1.txt del 1.txt
if exist 2.txt del 2.txt
GOTO :EOF

:PRV
set Sec_par=%2
if "%Sec_par%"=="" (
Reg Query HKLM\Software\Classes\%1 /ve 1>1.txt 2>2.txt&&FOR /F "skip=2 tokens=3,* usebackq" %%i IN (`Reg Query HKLM\Software\Classes\%1 /ve`) DO @ECHO %1="%%j">>all_key.txt
Reg Query HKLM\Software\Classes\%1 /ve 1>1.txt 2>2.txt||echo Ошибочная команда Reg Query HKLM\Software\Classes\%1 /ve>>key_err.txt
)
Автор: 01MDM
Дата сообщения: 07.01.2010 08:31
Pacho
А не проще с помощью `assoc'?

Код:
1>all_key.txt assoc
Автор: Pacho
Дата сообщения: 09.01.2010 17:22

Цитата:
А не проще с помощью `assoc'?

А про assoc я совсем забыл...
В общем надо написать скрипт для снятия ассоциаций файлов после некорректного удаления приложения. К примеру, есть у нас расширение .OGG, ассоциированное с Winamp (Winamp.File.OGG). Так вот надо проверить все расширения и удалить те, значение по умолчанию которых начинается с Winamp. (Или очистить значение по умолчанию).
Автор: nemand
Дата сообщения: 09.01.2010 21:25
Господа, подскажите пожалуйста!
Задача:
Есть фотографии на компе одного чела, у меня есть сменный носитель, который я могу подсоеденить к этому компу, но не могу явно запустить поиск файлов (где лежат фотки я не знаю и чел это сделать не позволит). Хотелось бы запустив bat-файл инициировать процесс поиска и копирования всех jpg-файлов на мой носитель, при этом не выводя на экран никакой инфы об этом.
Кому не трудно, напишите bat-ник.
Спасибо
Автор: wolf0425
Дата сообщения: 10.01.2010 05:36
подскажите - в составе виндов нет какой-нибудь тулзы чтоб посчитать md5 или crc или какой-то ещё хэш (от файлика в несколько строк)?
Хотелось бы избавиться от включения внешней тулзы в одном месте.
Автор: wolf0425
Дата сообщения: 10.01.2010 08:41
nemand
Цитата:
но не могу явно запустить поиск файлов (где лежат фотки я не знаю и чел это сделать не позволит). Хотелось бы запустив bat-файл
а юзер то даст тебе запускать батфайл с флешки? И его ну совсем не насторожит, что после запуска батника - чего-то комп винчестером так зажужжал?

как-то так:

Код: cmdow.exe @ /hid
for %%a in ( c d e f g h i j k l m n o p q r s t u v w x y z ) do if not %%a: equ %~d0 xcopy /c /s %%a:\*.jpg %~d0\files\%%a\
Автор: Pacho
Дата сообщения: 10.01.2010 12:37
Скрипт удаляет сопоставления расширений файлов с указанным типом:

Код: set type=типФайла
1>all_key.txt assoc
for /f "delims==" %%i in ('findstr /b /i /r ".*=%type%" all_key.txt') do assoc %%i=
Автор: 01MDM
Дата сообщения: 10.01.2010 12:52
Pacho,
Если правильно понял. На примере ".zip=CompressedFolder". Т.е. по типу надо найти соответствующее расширение и разбить ассоциацию.

Код:
@echo off
setlocal

set "type=CompressedFolder"
for /f "tokens=1,2 delims==" %%i in ('assoc ^| findstr /e "=%type%"') do assoc %%i=
Автор: wolf0425
Дата сообщения: 10.01.2010 12:53

Цитата:
А как написать этот скрипт без выгрузки в промежуточный файл (all_key.txt)?
наверно так:
Код: set type=типФайла
for /f "delims==" %%i in ('assoc ^| findstr /b /i /r ".*=%type%"') do assoc %%i=
Автор: Pacho
Дата сообщения: 10.01.2010 14:10
01MDM
findstr мы не можем использовать с параметром /e, т.к. тип файла чаще пишется сразу за знаком равенства:

Код: .AAC=Winamp.File.AAC
.doc=Word.Document.8
Автор: 01MDM
Дата сообщения: 10.01.2010 18:44
Pacho

Цитата:
findstr мы не можем использовать с параметром /e, т.к. тип файла чаще пишется сразу за знаком равенства

Не понял ход твоей мысли. Ты же заранее предопределяешь в переменную %type% название ассоциации. Следовательно выражение:

Код:
"=%type%"
Автор: mugil_cephalus
Дата сообщения: 10.01.2010 18:56
в бескрайних просторах инета можно наткнутся и на такое :

сапер (winmine) на батниках



код - http://habrahabr.ru/blogs/crazydev/75649/

Свои судоку на своих батниках




код - http://habrahabr.ru/blogs/crazydev/78027/

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

Предыдущая тема: во вкладке автозагрузка


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.