bat поиск слова в файле
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
bat поиск слова в файле
Добрый день, помогите пожалуйста решить задачу.
Нужно копировать *.bat файлы из одной папки в другую. При этом файлы внутри которых встречается слово X должны игнорироваться.
Понятия не имею, как это сделать. Мучаюсь со вчерашнего дня.
Cпасибо.
Нужно копировать *.bat файлы из одной папки в другую. При этом файлы внутри которых встречается слово X должны игнорироваться.
Понятия не имею, как это сделать. Мучаюсь со вчерашнего дня.
Cпасибо.
Обычный поиск по маске *.bat > c текстом > файлы не содержащие этот текст. После нахождения и вывода на панель можно делать, что душе угодно (копировать/перемещать/удалять).
Либо создаётся шаблон с этими условями поиска и при копировании всего выделенного по F5 в качестве фильтра вставляется имя шаблона в поле "Только файлы типа" (можно выбрать из выпадающего списка).
Либо создаётся шаблон с этими условями поиска и при копировании всего выделенного по F5 в качестве фильтра вставляется имя шаблона в поле "Только файлы типа" (можно выбрать из выпадающего списка).
- Вахмурка
- Сообщения: 2587
- Зарегистрирован: Пн дек 27, 2004 14:47
- Откуда: Большая деревня Москва
- Контактная информация:
Задача поставлена безграмотно, и, возможно, решение Flasher'а не годится: его нельзя уложить в один клик. EN88, попробуй поиграться с командой find:Почитать о ней можно хотя бы здесь, да и в любом зхорошем справочнике по DOS.
Код: Выделить всё
FIND [/V] [/C] [/N] [/I] "строка" [[диск:][путь]имя_файла[ ...]]Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
- Вахмурка
- Сообщения: 2587
- Зарегистрирован: Пн дек 27, 2004 14:47
- Откуда: Большая деревня Москва
- Контактная информация:
Это правда, но команду можно вставить в батник с параметрами, например,одной команды find для единственного клика недостаточно
Код: Выделить всё
%P %T словоВ-общем, пока вопрошающий не подаст голос, мы все равно ничего не поймем.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Я просто не понял, в какой батник, и где, собственно, команда copy? Или всё это вопрошающий должен знать по умолчанию (видимо, точно так же, как c vbs, PP и т.д.)?Вахмурка писал(а):Это правда, но команду можно вставить в батник с параметрами, например,
Если шаблон создан, то можно использовать такой скрипт:
Код: Выделить всё
' Копировать выделенное по шаблону в другую панель
' Параметры: "<Имя шаблона>"
'====================================
With CreateObject("TCScript.Helper")
T=.GetTextFromClip
.SetTextToClip(">"&WScript.Arguments(0))
.SendKeystroke "{F5}{TAB}^V~"
.SetTextToClip(T)
End With
Последний раз редактировалось Flasher Вс июн 05, 2011 18:05, всего редактировалось 1 раз.
Поторопился.
Задание, как оно есть:
написать командный файл, выполняющий следующие действия:
- создать каталог с названием dir<дата>, где дата - дата, кот была 50000 дней назад от текущей.
- в каталог dir<дата> скопировать все файлы компьютера с расширением *.bat, но не содержащие слова "for".
- результат работы, количество скопированных файлов и их названия, записать в журнальный файл report.log
- заархивировать содержимое каталога dir<дата> программой winrar с ключами:
формат zip
имя с использованием даты
после архивации исходники удалить
не включать файлы с размером (более 500 б) //менее 1,5мб
- результат работы, кол-во заархивированых файлов и их названия, дописать в лог
Кривой код, который работает, но для for там условия нет:
(date.bat определяет дату -50000 дней назад)
Задание, как оно есть:
написать командный файл, выполняющий следующие действия:
- создать каталог с названием dir<дата>, где дата - дата, кот была 50000 дней назад от текущей.
- в каталог dir<дата> скопировать все файлы компьютера с расширением *.bat, но не содержащие слова "for".
- результат работы, количество скопированных файлов и их названия, записать в журнальный файл report.log
- заархивировать содержимое каталога dir<дата> программой winrar с ключами:
формат zip
имя с использованием даты
после архивации исходники удалить
не включать файлы с размером (более 500 б) //менее 1,5мб
- результат работы, кол-во заархивированых файлов и их названия, дописать в лог
Кривой код, который работает, но для for там условия нет:
(date.bat определяет дату -50000 дней назад)
Код: Выделить всё
@ECHO OFF
ECHO.
IF NOT "%OS%"=="Windows_NT" GOTO :EOF
SET ERROR=0
::date
for /f "skip=3 tokens=4,5,6 delims=. " %%a in ('call c:\RGZ\work\date.bat -50000 ^| find /v "(" ') do (
set dd=%%a
set mm=%%b
set yyyy=%%c
)
set yy=%yyyy:~2,2%
set cdate=%dd%%mm%%yy%
set cdir=dir%cdate%
if not exist %cdir% mkdir %cdir%
echo ======%cdir% CREATED======
::копируем
xcopy c:\RGZ\work\rgz\*.bat c:\RGZ\work\rgz2\temp
dir c:\RGZ\work\rgz2\temp /a:-d /s /b >_temp.txt
for /f %%a in ('type _temp.txt') do (
for /f "tokens=5 delims=. " %%b in (' dir %%a /-c ^| findstr /R /B /C:"[0-9]*\.[0-9]*"') do (
call :ras %%b %%a
)
)
set rez=c:\RGZ\work\rgz2\report1.log
dir %cdir% /b /-x > %rez%
set /a count=0
for /r c:\RGZ\work\rgz2\%cdir% %%b in (*.*) do (
set /a count+=1
)
echo ________________________________________ >> %rez%
echo Количество скопированных файлов: %count% >> %rez%
echo ________________________________________ >> %rez%
SET /a count2=0
dir c:\RGZ\work\rgz2\%cdir%\*.bat /a /b /s > arch.txt
for /f %%a in ('type arch.txt') do (
for /f "tokens=1,3,4 delims= " %%b in ('dir %%a /-c ^| findstr /R /B /C:"[0-9]*\.[0-9]*\."') do (
if %%c LSS 500 (
echo %%a >> report2.log
c:\progra~1\winrar\winrar.exe a -afzip -r -o+ -ep -df -agDDMMYY arhiv_ %%a
echo %%b >> report2.log
SET /a count2+=1
)
)
)
echo ________________________________________ >> report2.log
echo Количество заархивированных файлов: %count2% >> report2.log
echo ________________________________________ >> report2.log
copy report1.log+report2.log report.log
::чистка
del /q C:\RGZ\work\rgz2\temp
rd /q C:\RGZ\work\rgz2\temp
del /q C:\RGZ\work\rgz2\_temp.txt
del /q C:\RGZ\work\rgz2\arch.txt
del /q C:\RGZ\work\rgz2\report1.log
del /q C:\RGZ\work\rgz2\report2.log
goto:eof
:ras
set size=%1
set fname=%2
if %size% LEQ 1048576 (
copy %fname% c:\RGZ\work\rgz2\%cdir%
echo %fname% >> report1.log
)
goto:eof- Вахмурка
- Сообщения: 2587
- Зарегистрирован: Пн дек 27, 2004 14:47
- Откуда: Большая деревня Москва
- Контактная информация:
Ага, значит, ты батникописец. То есть с командами DOS, например, find, на короткой ноге. Так за чем дело стало? Короче, повторю ссылку на свой пост.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
- Вахмурка
- Сообщения: 2587
- Зарегистрирован: Пн дек 27, 2004 14:47
- Откуда: Большая деревня Москва
- Контактная информация:
Вот цитата отсюда:
If you want to search for a set of files, you can use the find command within the for command. To search the current directory for files that have the extension .bat and that contain the string "PROMPT", type:
for %f in (*.bat) do find "PROMPT" %f
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
- Вахмурка
- Сообщения: 2587
- Зарегистрирован: Пн дек 27, 2004 14:47
- Откуда: Большая деревня Москва
- Контактная информация:
Ключ /v команды find обращает поиск (типа "не")... А ты батник точно сам писал? 
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
В цикле для каждого файла выполняешь команду:
И сразу после неё в том же цикле проверяешь код возврата errorlevel - в зависимости от того, был ли найден текст в файле, результат будет различным (0, если найден, и 1, если не найден):
Условие errorlevel 1 истинно, если errorlevel больше либо равна 1, поэтому для проверки значения 0 нужно проверять условие not errorlevel 1.
Код: Выделить всё
find [/i] "for" "filename">nulКод: Выделить всё
if not errorlevel 1 игнорим_файл
иначе_копируемКод: Выделить всё
for /f "delims=" %%a in ('findstr /vimsrc:"\<for\>" c:\*.bat') do copy "%%~fa" kuda-to\