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

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

Автор: ComradG
Дата сообщения: 21.06.2010 11:00
wolf0425
На счет if может ты и прав - просто это я так привык писать баты. За оптимизацию спасибо. А что на счет прочих идей, скажем, рекурсии при создании архивов - в примере она там по умолчанию?
Автор: wolf0425
Дата сообщения: 21.06.2010 11:22

Цитата:
это я так привык писать баты.
я заметил
просто ты напрочь не видишь ошибку в том что пишешь
никакой логики в том, что твой вариант на arc.cmd /x 123 456 начнет паковать каб - не видать.

Цитата:
А что на счет прочих идей, скажем, рекурсии при создании архивов - в примере она там по умолчанию?
да идеи как-то упростить себе вызов архиваторов с дефолтовым комплетом ключиков у многих на каком-то этапе возникают, но обычно не доживают до реализации.
к рекурсии я как раз положительно отношусь, только вписал бы -r0 и входные параметры до %9
и кстати -mx%2 пишется через пробел
Автор: lorents
Дата сообщения: 21.06.2010 11:29
Добрый день!

Код: call :compare "%%~dpni_png1.png" "%%~dpni_png2.png" "%%~fi" "%%~nxi"
: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
Дата сообщения: 21.06.2010 11:32

Цитата:
Почему это не происходит?
а где код в котором определяется %%i ?
когда тебе код с этим куском выдавали - в нем всё работало.

кстати, между строками call :compare
и :compare - вставь что-нибудь, типа goto :eof
Автор: lorents
Дата сообщения: 21.06.2010 12:19
wolf0425

Цитата:
а где код в котором определяется %%i ?


Код: for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
)
Автор: king_stiven
Дата сообщения: 21.06.2010 12:32
wolf0425
Ты goto не увлекайся, скобочки надёжнее.


Цитата:
Цитата:когда тебе код с этим куском выдавали - в нем всё работало.

сейчас тестировал не работает


Автор: res2001
Дата сообщения: 21.06.2010 13:56
lorents
добавь после :compare echo %%1 %%2
и посмотри что выводит.
Сдается мне, что у тебя параметры не правильно передаются.

Добавлено:
нет, похоже правильно, поторопился.
Автор: lorents
Дата сообщения: 21.06.2010 14:24
И еще подскажите, пожалуйста, в двух моментах

как можно перебрать значения параметра /f (от 0 до 5, все значения целые), и при этом чтобы в названии получившегося файла писалось значение параметра

Код: for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
"%~dp0Docs\pngout.exe" /f0 "%%~fi" "%%~dpni_0.png."
)
Автор: wolf0425
Дата сообщения: 21.06.2010 14:32

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

Цитата:
можно просто написать пять строчек с разными параметрами, но хотелось бы сделать более правильно.
прочитай for /? и впиши правильно

Добавлено:
Цитата:
Как можно получить текстовой файл (таблицу с четырьмя колонками), где в первой колонке написано имя файла с расширением, а в трех остальных колонках размер файлов

если ты файлы в папках хотел посравнивать то как-то так:
Код: for %%a in ( dir1\* )do call :print %%a
pause&exit

:print
0>nul set /p="%%~nx1"
call :size "dir1\%%~nx1"
call :size "dir2\%%~nx1"
call :size "dir3\%%~nx1"
echo.
exit /b
:size
if .%~z1 neq . (0>nul set /p="    %%~z1") else (0>nul set /p="    -")
exit /b
Автор: ComradG
Дата сообщения: 21.06.2010 14:41
wolf0425

Цитата:
никакой логики в том, что твой вариант на arc.cmd /x 123 456 начнет паковать каб - не видать

В смысле, ты подставляешь несуществующий параметр? Это впринципе лечится:

Код: if "%2"=="" goto:message
if /i "%1"=="/c" goto:cabfile
if /i "%1"=="/z" goto:zipfile
if /i "%1"=="/?" goto:message
if /i "%1"=="%*" (
echo Wrong parameter! Use /? to see help.
goto:eof
)
Автор: res2001
Дата сообщения: 21.06.2010 14:42
lorents

Цитата:
как можно перебрать значения параметра /f (от 0 до 5, все значения целые), и при этом чтобы в названии получившегося файла писалось значение параметра


Код: for /l %%i in (0;1;5) do команда
Автор: wolf0425
Дата сообщения: 21.06.2010 14:51
ComradG
Цитата:
В смысле, ты подставляешь несуществующий параметр? Это впринципе лечится:
а ты проверил бы...
я про то, что всегда ложна быть явная ветка ветвления, на которую уходит при отсутствии совпадений с вариантами проверки. Это я про ветвления по разным %1
а твоя if /i "%1"=="%*" - это примерно if "%2"==""

Автор: res2001
Дата сообщения: 21.06.2010 14:51
ComradG

Цитата:
Согласись, что это экономит массу времени, сил и нервных клеток.

да нифига это не экономит. Согласен, что из инета можешь вытянуть разнообразные архивы, но, как правило, сейчас это zip, rar, 7z, остальные экзотика. winrar и 7z умеют распаковывать из всех этих форматов.
А упаковываешь, обычно, в одном формате, своим любимым архиватором.

В конторе у меня для разных нужд используются cab, arj, jar - но там все упаковывается/распаковывается своими встроенными обработчиками, руками практически ничего не делается. Поэтому на мой взгляд ценность универсального упаковщика/распаковщика сомнительна.

Добавлено:

Цитата:
Или ты не про это? Можешь поточнее выразить свою мысль?

Видимо wolf0425 имеет ввиду что-то такое:

Код: if "%2"=="" (
goto:message
) else if /i "%1"=="/c" (
goto:cabfile
) else if /i "%1"=="/z" (
goto:zipfile
) else if /i "%1"=="/?" (
goto:message
) else (
echo Wrong parameter! Use /? to see help.
goto:eof
)
Автор: lorents
Дата сообщения: 21.06.2010 14:57
wolf0425

Цитата:
скорее какой-то файлы не создался и сравнивать нечего

"%%~dpni_png1.png" и "%%~dpni_png2.png" они создаются, это точно
"%%~fi" - дается изначально изначально
Я как посмотрю сравниваются "%%~dpni_png1.png" и "%%~dpni_png2.png", а "%%~fi" нет
вот почему я не заметил этого тогда, меня интересовали "%%~dpni_png1.png" и "%%~dpni_png2.png"

Цитата:
прочитай for /? и впиши правильно


Код: for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
for %%m in (0 1 2 3 4 5) do
"%~dp0Docs\pngout.exe" /f%%m "%%~fi" "%%~dpni_%%m.png"
)
Автор: wolf0425
Дата сообщения: 21.06.2010 15:01

Цитата:
Стоп! В качестве %2 указывется уровень сжатия - для 7za, если мне не изменяет память этот параметр выглядит как -mx5 или -mx9, т.е. пробелов там не надо.
в смысле - макс сжатие не хочешь, хочешь в параметре? ну можно и так, только мне вот точно влом каждый раз указывать степень сжатия.

Добавлено:

Цитата:
Я как посмотрю сравниваются "%%~dpni_png1.png" и "%%~dpni_png2.png", а "%%~fi" нет
что тогда просил - то и сравнивается. просил ты именно сравнение двух файлов и замещение третьего одним из них


Добавлено:

Цитата:
правильно?
да, вполне, только строку у второго for или не рви или ещё уровень скобок впиши
т.е. ....5) do "%~dp0Docs\pngout.exe".....
Автор: ComradG
Дата сообщения: 21.06.2010 15:06
res2001

Цитата:
да нифига это не экономит

Это твое мнение, тем более как писалось выше 7za и cabarc взяты только для примера.
А вот
Цитата:
Видимо wolf0425 имеет ввиду что-то такое

wolf0425

Цитата:
а твоя if /i "%1"=="%*" - это примерно if "%2"==""

Ну вот, уже к чему то приходим. Тем более я и имел в виду, что если писать if /i "%1"=="%*", то надобность в if "%2"=="" отпадает.

Цитата:
я про то, что всегда ложна быть явная ветка ветвления, на которую уходит при отсутствии совпадений с вариантами проверки

Кудряво сказано, а проще что такое? (С)И.Гёте
Автор: wolf0425
Дата сообщения: 21.06.2010 15:07

Цитата:
а проще что такое? (С)И.Гёте
тебе вписали -
Код: ) else (
echo Wrong parameter! Use /? to see help.
goto:eof
)
Автор: lorents
Дата сообщения: 21.06.2010 15:08
wolf0425

Цитата:
что тогда просит - то и сравнивается. просит ты именно сравнение двух файлов и замещение третьего одним из них

понятно, спасибо
Автор: wolf0425
Дата сообщения: 21.06.2010 15:10

Цитата:
Это твое мнение,
ну да, его, мое, и наверно ещё кто-то найдется.
у тебя конечно может быть всё по другому, но мы тебе не верим
Автор: ComradG
Дата сообщения: 21.06.2010 15:11

Цитата:
в смысле - макс сжатие не хочешь, хочешь в параметре?

Тебе влом. А представь ситацию, когда просто нужно быстро пожать файлы? Скорость то от степени сжатия зависит, так?
Автор: wolf0425
Дата сообщения: 21.06.2010 15:13

Цитата:
А представь ситацию, когда просто нужно быстро пожать файлы?

тогда я делаю это ФАРом со степенью сжатия по умолчанияю.
Автор: lorents
Дата сообщения: 21.06.2010 15:18
wolf0425

Цитата:
что тогда просил - то и сравнивается. просил ты именно сравнение двух файлов и замещение третьего одним из них

а я могу вписать тогда пять файлов для сравнения, будет это работать?
Автор: ComradG
Дата сообщения: 21.06.2010 15:18

Код: ) else (
echo Wrong parameter! Use /? to see help.
goto:eof
)
Автор: res2001
Дата сообщения: 21.06.2010 15:20
lorents

Цитата:
У меня есть папка, и в ней лежат три папки с одинаковыми названиями файлов, которые в папках, но с разным размером, Как можно получить текстовой файл (таблицу с четырьмя колонками), где в первой колонке написано имя файла с расширением, а в трех остальных колонках размер файлов



Код: @echo off
for %%i in (.\dir1\*.*) do (
    call :print "%%~nxi" "dir1\%%~nxi" "dir2\%%~nxi" "dir3\%%~nxi"
)
goto :eof
:print
echo %1    %~z2    %~z3    %~z4
exit /b
Автор: ComradG
Дата сообщения: 21.06.2010 15:30
res2001
Ха! Понеслось заново: давайте обосрем скрипт ComradG, потому что он в них ничего не понимает, ровно как и в том, что я такой крутой и знаю по более его, а он такой кретин ничего толкового так и не написал.
Автор: wolf0425
Дата сообщения: 21.06.2010 15:34
lorents

Цитата:
У меня есть папка, и в ней лежат три папки с одинаковыми названиями файлов, которые в папках, но с разным размером, Как можно получить текстовой файл (таблицу с четырьмя колонками), где в первой колонке написано имя файла с расширением, а в трех остальных колонках размер файлов
смотри код на предыдущей странице
Цитата:
а я могу вписать тогда пять файлов для сравнения, будет это работать?
вписать ты можешь что угодно, а код сравнивает первые два файла.

ComradG
Цитата:
Похоже вы либо шутите, либо издеваетесь - это похоже на толкотню воды в ступе.
нет, этот код как раз и обеспечивает защиту от ввода неизвестного банику ключа - точнее делает очевидной реакцию батника на такой ключ.
например твой первоначальный код на ключ /x - пытался паковать .cab
мой вариант - на любой непонятный ключ печатает хэлп,
этот вариант - печатает что надо набрать чтобы прочитать хэлп.


Цитата:
а он такой кретин ничего толкового так и не написал.
написал ли ты что-то толковое - как-то прошло мимо нас, а вот то как ты неадекватно реагируешь на замечания по твоему коду - заметно напрягает, так как вместо разбора своих ошибок у тебя случается только ругань, что на тебя такого умного наезжают незаслуженно и твой идеальный код ругают совсем зря.
Автор: lorents
Дата сообщения: 21.06.2010 15:36
res2001
то что надо, спасибо, только один вопрос, а как передать эти значения в текстовой файл?
Автор: res2001
Дата сообщения: 21.06.2010 15:36
lorents
echo %1 %~z2 %~z3 %~z4 >file.txt
Автор: wolf0425
Дата сообщения: 21.06.2010 15:38
lorents
Цитата:
а как передать эти значения в текстовой файл?
дописать 1>>file.txt в начало строки с echo
Автор: lorents
Дата сообщения: 21.06.2010 15:42
res2001
я так пробовал, у меня записывается только одна строчка


Цитата:
вписать ты можешь что угодно, а код сравнивает первые два файла.

а можно это исправить, мне надо пять файлов сравнивать?

Добавлено:
wolf0425

Цитата:
дописать 1>>file.txt в начало предпоследней строки.

получилось, спасибо

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

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


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