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

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

Автор: lorents
Дата сообщения: 24.03.2010 13:11
wolf0425

Цитата:
так объедини, если раздельно они не нужны. дописываешь

Спасибо, и спасибо, за все что Вы сделали, для меня
Автор: bredonosec
Дата сообщения: 24.03.2010 17:43
вопрос, чтоб перезаписать файл втихую и без подтверждений или вопросов, какой синтаксис нужен? (для использования в батнике - подряд всем удаленно перезаписать)
copy /b "c:\.....\Desktop\file.url" "%PK_DIR%\desktop\*.*" /y
?
или дополнительно что-то нужно прописать?

Добавлено:
зы, какой синтаксис использовать для того, чтоб пакетно в реестр каждому внести строку?
Автор: lorents
Дата сообщения: 24.03.2010 19:14
wolf0425
Если не затруднит, посмотрите пожалуйста, все ли я правильно сделал
[more]
Код: Rem 24/03/2010
@echo off

1>nul 2>nul dir /b /s /a-d Images\*.png || goto:jpeg

:loop1
echo [1] PNG Interlace - Noninterlaced
echo [2] PNG Interlace - Adam7

set /p png="Choose a task by number: "

if not defined png goto:eof
if %png%==1 goto:Noninterlaced
if %png%==2 goto:Adam7
goto:loop1

:Noninterlaced
echo Noninterlaced
Rem Optimization PNG (Interlace - Noninterlaced)
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
    call :png "%%~fi"
    "%~dp0Docs\pngcrush.exe" -rem alla -brute -reduce "%%~fi" "%%~dpni.tmp"
    move /y "%%~dpni.tmp" "%%~fi"
    "%~dp0Docs\advdef.exe" -z -4 "%%~fi"
    "%~dp0Docs\deflopt.exe" "%%~fi"
    "%~dp0Docs\optipng.exe" -zc1-9 -zm1-9 -zs0-3 -f0-5 "%%~fi"
    "%~dp0Docs\advdef.exe" -z -4 "%%~fi"
    "%~dp0Docs\deflopt.exe" "%%~fi"
    "%~dp0Docs\pngout.exe" "%%~fi"
    "%~dp0Docs\advdef.exe" -z -4 "%%~fi"
    "%~dp0Docs\deflopt.exe" "%%~fi"
)
goto:jpeg

goto :eof
:png
"%~dp0Docs\optipng.exe" -i0 -zc1-9 -zm1-9 -zs0-3 -f0-5 -full -force %1 > Docs\png.log
for /f "delims==,IDAT tokens=5" %%i in (Docs\png.log) do (
    set f=%%i
)
set f=%f:~1,1%
del Docs\png.log
"%~dp0Docs\pngout.exe" /k0 /n2 /f%f% %1

:Adam7
echo Adam7
Rem Optimization PNG (Interlace - Adam7)
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
    "%~dp0Docs\optipng.exe" -i1 "%%~fi"
    "%~dp0Docs\pngcrush.exe" -rem alla -brute -reduce "%%~fi" "%%~dpni.tmp"
    move /y "%%~dpni.tmp" "%%~fi"
    "%~dp0Docs\advdef.exe" -z -4 "%%~fi"
    "%~dp0Docs\deflopt.exe" "%%~fi"
    "%~dp0Docs\optipng.exe" -zc1-9 -zm1-9 -zs0-3 -f0-5 "%%~fi"
    "%~dp0Docs\advdef.exe" -z -4 "%%~fi"
    "%~dp0Docs\deflopt.exe" "%%~fi"
)

:jpeg
1>nul 2>nul dir /b /s /a-d Images\*.jpg Images\*.jpeg || goto:eof

:loop2
echo [1] JPEG - Optimize
echo [2] JPEG - Progressive
echo [3] JPEG - Progressive vs. Optimize

set /p jpeg="Choose a task by number: "

if not defined jpeg goto:eof
if %jpeg%==1 goto:Optimize
if %jpeg%==2 goto:Progressive
if %jpeg%==3 goto:Progressive_Optimize
goto:loop2

:Optimize
echo JPEG - Optimize
Rem Optimization JPEG (Optimize)
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg') do (
    "%~dp0Docs\jpegtran.exe" -copy all -optimize "%%~fi" "%%~fi"
    "%~dp0Docs\jhead.exe" -dc -de -di -dx -du "%%~fi"
)
goto:eof

:Progressive
echo JPEG - Progressive
Rem Optimization JPEG (Progressive)
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg') do (
    "%~dp0Docs\jpegtran.exe" -copy all -progressive "%%~fi" "%%~fi"
    "%~dp0Docs\jhead.exe" -dc -de -di -dx -du "%%~fi"
)
goto:eof

:Progressive_Optimize
echo JPEG - Progressive vs. Optimize
Rem Optimization JPEG (Progressive vs. Optimize)
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg') do (
    "%~dp0Docs\jpegtran.exe" -copy all -progressive "%%~fi" "%%~dpni_pro.tmp"
    "%~dp0Docs\jpegtran.exe" -copy all -optimize "%%~fi" "%%~dpni_opt.tmp"
    call :compare "%%~dpni_pro.tmp" "%%~dpni_opt.tmp" "%%~fi" "%%~nxi"
    "%~dp0Docs\jhead.exe" -dc -de -di -dx -du "%%~fi"
)
goto :eof

:compare
if %~z1 LSS %~z2 (
    DEL /F /Q %2
    DEL /F /Q %3
    REN %1 %4
) else (
    DEL /F /Q %1
    DEL /F /Q %3
    REN %2 %4
)
goto:eof
Автор: wolf0425
Дата сообщения: 24.03.2010 19:42

Цитата:
т.е. когда проверяется png и их нет, то мы переходим к jpeg и вот если нет jpeg, то выводим сообщение что файлов нет и батник закрывается
т.е. просто молчаливое закрытие, как сейчас - тебя чем-то не устраивает?

[more=держи]
Код: Rem 24/03/2010
@echo off

1>nul 2>nul dir /b /s /a-d Images\*.png || goto:jpeg

:loop1
echo [1] PNG Interlace - Noninterlaced
echo [2] PNG Interlace - Adam7

set /p png="Choose a task by number: "

if not defined png goto:eof
if %png%==1 goto:Noninterlaced
if %png%==2 goto:Adam7
goto:loop1

:Noninterlaced
echo Noninterlaced
Rem Optimization PNG (Interlace - Noninterlaced)
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
call :png "%%~fi"
"%~dp0Docs\pngcrush.exe" -rem alla -brute -reduce "%%~fi" "%%~dpni.tmp"
move /y "%%~dpni.tmp" "%%~fi"
"%~dp0Docs\advdef.exe" -z -4 "%%~fi"
"%~dp0Docs\deflopt.exe" "%%~fi"
"%~dp0Docs\optipng.exe" -zc1-9 -zm1-9 -zs0-3 -f0-5 "%%~fi"
"%~dp0Docs\advdef.exe" -z -4 "%%~fi"
"%~dp0Docs\deflopt.exe" "%%~fi"
"%~dp0Docs\pngout.exe" "%%~fi"
"%~dp0Docs\advdef.exe" -z -4 "%%~fi"
"%~dp0Docs\deflopt.exe" "%%~fi"
)
goto:jpeg

:png
for /f "delims==,IDAT tokens=5" %%i in ('"%~dp0Docs\optipng.exe" -i0 -zc1-9 -zm1-9 -zs0-3 -f0-5 -full -force %1') do set f=%%i
set f=%f:~1,1%
"%~dp0Docs\pngout.exe" /k0 /n2 /f%f% %1
goto:eof

:Adam7
echo Adam7
Rem Optimization PNG (Interlace - Adam7)
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
"%~dp0Docs\optipng.exe" -i1 "%%~fi"
"%~dp0Docs\pngcrush.exe" -rem alla -brute -reduce "%%~fi" "%%~dpni.tmp"
move /y "%%~dpni.tmp" "%%~fi"
"%~dp0Docs\advdef.exe" -z -4 "%%~fi"
"%~dp0Docs\deflopt.exe" "%%~fi"
"%~dp0Docs\optipng.exe" -zc1-9 -zm1-9 -zs0-3 -f0-5 "%%~fi"
"%~dp0Docs\advdef.exe" -z -4 "%%~fi"
"%~dp0Docs\deflopt.exe" "%%~fi"
)

:jpeg
1>nul 2>nul dir /b /s /a-d Images\*.jpg Images\*.jpeg && goto:loop2
if not defined png echo Not found: Images\*.png Images\*.jpg Images\*.jpeg
goto:eof

:loop2
echo [1] JPEG - Optimize
echo [2] JPEG - Progressive
echo [3] JPEG - Progressive vs. Optimize

set /p jpeg="Choose a task by number: "

if not defined jpeg goto:eof
if %jpeg%==1 goto:Optimize
if %jpeg%==2 goto:Progressive
if %jpeg%==3 goto:P_Optimize
goto:loop2

:Optimize
echo JPEG - Optimize
Rem Optimization JPEG (Optimize)
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg') do (
"%~dp0Docs\jpegtran.exe" -copy all -optimize "%%~fi" "%%~fi"
"%~dp0Docs\jhead.exe" -dc -de -di -dx -du "%%~fi"
)
goto:eof

:Progressive
echo JPEG - Progressive
Rem Optimization JPEG (Progressive)
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg') do (
"%~dp0Docs\jpegtran.exe" -copy all -progressive "%%~fi" "%%~fi"
"%~dp0Docs\jhead.exe" -dc -de -di -dx -du "%%~fi"
)
goto:eof

:P_Optimize
echo JPEG - Progressive vs. Optimize
Rem Optimization JPEG (Progressive vs. Optimize)
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg') do (
"%~dp0Docs\jpegtran.exe" -copy all -progressive "%%~fi" "%%~dpni_pro.tmp"
"%~dp0Docs\jpegtran.exe" -copy all -optimize "%%~fi" "%%~dpni_opt.tmp"
call :compare "%%~dpni_pro.tmp" "%%~dpni_opt.tmp" "%%~fi" "%%~nxi"
"%~dp0Docs\jhead.exe" -dc -de -di -dx -du "%%~fi"
)
goto :eof

:compare
if %~z1 LSS %~z2 (
DEL /F /Q %2
DEL /F /Q %3
REN %1 %4
) else (
DEL /F /Q %1
DEL /F /Q %3
REN %2 %4
)
goto:eof
Автор: lorents
Дата сообщения: 24.03.2010 23:09
wolf0425

Цитата:
поставить goto:eof после секции : png - мог бы и сам догадаться, раз не в конец её добавил.

Спасибо, Вы прям Мой спаситель

Цитата:
т.е. просто молчаливое закрытие, как сейчас - тебя чем-то не устраивает?

Сейчас объясню зачем мне это, хочу сделать, чтобы при запуске батника, писались кто автор (если Вы не возражаете, то хотел бы написать Ваш ник), какие программы используются, их версии и как пользоваться программой. Устанавливаем паузу, и вот когда пользователь нажимает на Enter идет уже запуск скрипта, и и если картинок нет,то выводится сообщение об этом.
Я просто планирую создать тему здесь на форуме, про оптимизацию картинок (PNG, JPEG, GIF)
Автор: Oleg93
Дата сообщения: 24.03.2010 23:59
какой командой оптимальнее узнавать размер раздела?

p.s. если есть возможность, то тогда подскажите код, чтоб при заполнении винта на 99 процентов(т.е. оставалось не меньше заданного предела) заменялся определенный файл тхт на другой тхт.

на данный момент идеи, это либо "брать" размер с dir БУКВ_ДИСКА либо как-то через diskpart или fsutil
но вот как сравнить размер, на данный момент не знаю

Автор: mugil_cephalus
Дата сообщения: 25.03.2010 10:32
Oleg93
FreeSpace.vbs http://www.robvanderwoude.com/wmiexamples.php#F
Автор: AlexanderBV
Дата сообщения: 25.03.2010 19:40
Подскажите плз, возможно ли решить следующую задачу :
Необходимо из одной папки скопировать самый большой и ранний сегодняший файл и самый маленький и последний вчераший в другую директорию.

Ранее было это, но сдесь не учитывался размер и именно последний вчерашний файл:

set name_date=%date:~11,2%%date:~6,2%%date:~3,2%
if not exist c:\%name_date%\nul md c:\%name_date%
move /y d:\1*.* c:\%name_date%

rem Определение сегодняшней даты mm.dd.yy
set now_date_copy=%date:~6,2%-%date:~3,2%-%date:~9,4%

Если первая утренняя порция уже обработана:
if exist c:\%name_date%\%name_date%.log goto end

Копирование файлов с временем не ранее сегодняшней даты
xcopy /y /d:%now_date_copy% c:\%name_date%\*.* c:\s > %name_date%.log

Копируем вчерашний файл
forfiles.exe /p c:\%name_date% /s /m *.* /d -1 /c "cmd /c xcopy /y c:\%name_date%\*.* c:\s" > %name_date%.log

Помещение log-файла в требуемое место в случае успешного копирования
for %%A in (%name_date%.log) do if not %%~zA==24 move /y %name_date%.log c:\%name_date%

:end

Заранее благодарен

Добавлено:
Прошу прощения за дубль )
Автор: wolf0425
Дата сообщения: 25.03.2010 19:43

Цитата:
Необходимо из одной папки скопировать самый большой и ранний сегодняший файл и самый маленький и последний вчераший в другую директорию.
так самый большой или самый ранний? это два разных способа сортировки, запросто дающих два разных имени файла.
Аналогичный вопрос про вчерашний последний/короткий.
Если не знаешь как объяснить -пиши примеры времени+размера и объяснение - который надо выбрать.

и формат даты в своей системе заодно укажи, а то у меня твой код дает
name_date=2003
now_date_copy=20-03-0



Цитата:
Прошу прощения за дубль )
чем просить прощения - лучше бы его прибил
Автор: king_stiven
Дата сообщения: 25.03.2010 20:13

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

Чота вспомнилось, сегодня раки маленькие. а вот вчера большие но по 5 рублей.
Автор: l3ha
Дата сообщения: 25.03.2010 20:22
вот-с, задача, ппц условие понятное, просветите плз кто...

2.Создать пакетный командный файл, выполняющий нижепере-
численные действия. В качестве формальных параметров использо-
вать имена файлов и подкаталогов (не менее двух). Запросы для
пользователя оформить в цветную рамку.
Имеется необходимость периодически проделывать следую-
щие действия: скопировать текстовый файл с диска О: на вирту-
альный диск (если вирт.диск отсутствует, создать на диске О:
поддиректорий и скопировать туда файл) с проверкой наличия
этого файла на диске О:, создать на диске О: поддиректорий и
скопировать туда файл с виртуального диска.
Перечисленные действия повторить 3,4 или 5 раз по выбору
пользователя с разными файлами.

P.S. знаю, что запросы и рамку надо через утилиту BE делать (что фигня)..
Собственно интересует смысл 2 и последнего предложений (как оное надобно?.. не втыкаю)
Автор: TAVulator
Дата сообщения: 25.03.2010 23:03
Ребят, подскажите как реализовать такое:
Есть текстовой файл со списком имен директорий, например:
111
222
333
еее

Нужно обойти все эти директории и все поддериктории в них и в каждой проделать определенное действие, например вывести список файлов в них.
Автор: lorents
Дата сообщения: 26.03.2010 00:07
Не подскажите, как можно сделать, чтобы батник отображал кириллицу правильно, а не символами?
И как можно сделать, чтобы батник отображал некий текст, типа

Цитата:
Версия батника 1.0.0.0 от 25.03.2010
Для продолжения нажмите Enter
Автор: l3ha
Дата сообщения: 26.03.2010 00:19

Цитата:
Не подскажите, как можно сделать, чтобы батник отображал кириллицу правильно, а не символами?
И как можно сделать, чтобы батник отображал некий текст, типа

Цитата:Версия батника 1.0.0.0 от 25.03.2010
Для продолжения нажмите Enter

1. в DOS кодировке (866) сохраняй батник
2. echo Версия батника 1.0.0.0 от %date%
echo Для продолжения нажмите Enter
pause>nul
но тут не enter, а любая клавиша (... может можно просто pause, без echo с enter-ом?)
Автор: AlexanderBV
Дата сообщения: 26.03.2010 01:06
wolf0425
Забыл написать - Операционная система Windows 2000 Server и формат даты отличается от ХР, а какой именно, завтра точно скажу. По поводу сортировки действительно сумбурно написал. Ситуация следующая, в папке есть файлы:
12345678.001 26.03.2010 12:00 100 Кб
12345678.002 26.03.2010 07:00 800 Кб
12345678.003 25.03.2010 12:00 700 Кб
12345678.004 25.03.2010 23:00 200 КБ
и т.д. нужно скопировать только 2 файла 12345678.002 и 12345678.004
Автор: wolf0425
Дата сообщения: 26.03.2010 02:43
lorents
Цитата:
Не подскажите, как можно сделать, чтобы батник отображал кириллицу правильно, а не символами?
фонт у консоли переключи на юникодный, если 1251 хочешь нормально видеть. Или действительно пиши батник в 866 кодировке.

TAVulator
Цитата:
Нужно обойти все эти директории и все поддериктории в них и в каждой проделать определенное действие, например вывести список файлов в них.

Код: for /f "delims=" %%a in (file.lst) do for /r %%a %%i in (*.*) do dir "%%~fi"
Автор: batniki
Дата сообщения: 26.03.2010 06:50
Помогите. Нужно завершить процессы, не относящиеся к списку исключения (winrar.exe, blabla.exe, ...) и превышающие 64 mb RAM.
Автор: patrion
Дата сообщения: 26.03.2010 08:57
Привет всем!
У меня 2 вопроса!
1) как сделать, что бы bat-ник читал пробелы?
2)Как через bat-ник переименовывать файлы?
Автор: wolf0425
Дата сообщения: 26.03.2010 08:59

Цитата:
1) как сделать, что бы bat-ник читал пробелы?
в смысле?


Цитата:
2)Как через bat-ник переименовывать файлы?
ren /?

Автор: Volchek
Дата сообщения: 26.03.2010 09:02
Господа-Гуры, нужон несложный батничек обновления по сети..

Сам в батниках пока -1, а сделать надо-бы побыстрее такое:
Имеем:
- Две рабочие станции Win XP Pro с расшаренными папками, в которых регулярно обновляются некие данные (просто добавляются новые файлы, на разных рабочих станциях разные)
- Серверок (тоже под Win XP Pro) с папкой, в которой необходимо иметь свежие сводные данные (сравнение списка файлов со спискоми на рабочих станциях и копирование с них новых файлов в подпапки с датами и, очень желательно, указанием имени компа-источника). Архивирование не требуется.

Как простейшим образом автоматизировать такую процедуру?

З.Ы. Подозреваю, что-то похожее уже было, но 8 многостраничных частей не осилил, а там где читал, не нашел...
Автор: lorents
Дата сообщения: 26.03.2010 09:43
wolf0425

Цитата:
фонт у консоли переключи на юникодный, если 1251 хочешь нормально видеть. Или действительно пиши батник в 866 кодировке.

Можно поподробнее, как это можно написать батник в кодировке 866?
пробовал

Код: chcp 866
Автор: wolf0425
Дата сообщения: 26.03.2010 09:56

Цитата:
Можно поподробнее, как это можно написать батник в кодировке 866?
берешь редактор, который умеет сохранять текст в 866 кодировке - и пишешь.
Я пользуюсь встроенным редактором ФАРа.


Цитата:
пробовал chcp 866 но не получилось
это команда переключения текущей страницы у cmd, а не кодировки батника. и 866 - она по умолчанию включена, на неё обычно переключать незачем.
Ну то-есть текущая кодировка должна совпадать с кодировкой в которой написан батник, чтобы русские имена нормально командами понимались, а назначенный консоли фонт должен иметь кодовую страницу для нормального отображения текста в используемой кодировке. стандартный растровый фонт - неуникодный, имеет только 866 страничку, так что переключение cmd в 1251 не понимает. А в 866 отображает всё замечательно.
Люсида имеет и 866 и 1251 и немало всякого прочего, включая какие-то иероглифы.
Автор: patrion
Дата сообщения: 26.03.2010 10:48
в смысле?
пишу precomp -slow Fallout - Meshes.bsa
он не видит пробелы..
Мне нужно его сначала переименовать... и сжать =)
если можно примерчик.
Автор: mugil_cephalus
Дата сообщения: 26.03.2010 11:26
king_stiven

Цитата:
Чота вспомнилось, сегодня раки маленькие. а вот вчера большие но по 5 рублей.




Автор: AlexanderBV
Дата сообщения: 26.03.2010 11:56
wolf0425
Касательно сортировки:
Необходимо скопировать первый файл с текущей датой, при этом сначала отобрать файлы с самой ранней датой создания (их может быть от 1-го до 4-х), а затем среди них выбрать тот у
которого размер самый большой. Пример:
12345678.001 26.03.2010 10:00 100 Кб
12345678.002 26.03.2010 10:00 500 Кб
12345678.003 26.03.2010 18:00 200 Кб
12345678.004 26.03.2010 18:20 800 Кб
Требуемый файл - 12345678.002
Второй скопированый файл должен быть создан вчера, с самой поздней датой создания и самим меньшим размером. Пример:
12345678.005 26.03.2010 09:00 100 Кб
12345678.006 26.03.2010 09:00 500 Кб
12345678.001 25.03.2010 10:00 100 Кб
12345678.002 25.03.2010 10:30 500 Кб
12345678.003 25.03.2010 22:00 200 Кб
12345678.004 25.03.2010 22:00 800 Кб
Требуемый файл - 12345678.003
Автор: yurkesha
Дата сообщения: 26.03.2010 12:24
AlexanderBV
Копай в направлении
Код: DIR /B /O:-DS /A:-D
Автор: patrion
Дата сообщения: 26.03.2010 12:40
Мне кто нибудь может помочь?
Автор: yurkesha
Дата сообщения: 26.03.2010 12:45
patrion

Цитата:
precomp -slow "Fallout - Meshes.bsa"

Автор: patrion
Дата сообщения: 26.03.2010 12:54
Круть! Спасибо! Выручил =)
Автор: mugil_cephalus
Дата сообщения: 26.03.2010 14:07
%9_3%.bat (запуск в консоли)

Код: @echo off
echo Hello, we are in
rem Рекурсивный вызов, %%~0 раскроется два раза
call %%~0

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

Предыдущая тема: XP не видит второй раздел на съемном USB-HDD


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