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

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

Автор: Road Runner J
Дата сообщения: 04.02.2011 12:09
res2001

Цитата:
Road Runner J
как-то так видимо

Код:@echo off
>nul ping -n 1 %1 || (echo.NO CONNECTION %1 & exit)
for /f "skip=4 tokens=1" %%a in ('tracert -d -h 21 %1') do if %%a gtr 0 (set "hop=%%a" & if %%a gtr 20 echo TOO MANY HOPS & exit) else call echo. & exit





Цитата:скрипт зависает без пингов


он не зависает - это tracert долго отрабатывает.

Добавлено:
вариант с TOO MANY HOPS не проверял - как-то не нашел узла с большим числом хопов.

Поправил параметры запуска tracert - убрал разрешение имен и ограничил число прыжков, так будет быстрее добираться до TOO MANY HOPS.


А как сделать чтобы скрипт не выходил если TOO MANY HOPS что-то типа:

проверяет наличие пинга, если есть едем дальше, если нет пишет NO CONNECTION и выход
считает хопы, если 10 пишет OK и выход, если больше пишет сколько насчитал допустим 15 BAD и выход
Автор: res2001
Дата сообщения: 04.02.2011 12:22
Road Runner J

Цитата:
проверяет наличие пинга, если есть едем дальше, если нет пишет NO CONNECTION и выход считает хопы, если 10 пишет OK и выход, если больше пишет сколько насчитал допустим 15 BAD и выход

Сделать можно, только хопы начнет считать сначала, будет большая задержка, тебе оно точно надо?
Автор: wolf0425
Дата сообщения: 04.02.2011 14:25

Цитата:
что мой batch работал через данный код.
твой батч - это ImageCatalyst.bat ? или тот из которого выдран этот вызов ImageCatalyst.bat ?

похоже второе...

Код: @echo off
if "%~1" neq "" (
    echo Processing files
    for %%i in ( %* ) do call ImageCatalyst.bat "%%~fi"
) else (
    echo Processing Images\*.png
    for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do call ImageCatalyst.bat "%%~fi"
)
Автор: lorents
Дата сообщения: 04.02.2011 15:24
wolf0425
Вот мой batch http://rghost.ru/4201689
На данный момент, ImageCatalyst.bat оптимизирует файлы которые лежат в папке Images.
Я хочу от этого отойти. Хочу сделать, так, чтобы пользователь мог выбирать откуда ему отправлять файлы на оптимизацию.
т.е. чтобы поддерживался такой вариант работы

Код: for /f "delims=" %%i in ('dir /b /s /a-d Dir1\*.png') do (
ImageCatalyst.bat "%%~fi"
)
Автор: aidarsimon
Дата сообщения: 04.02.2011 15:34
Помогите плиз с wevtutil.exe
Автор: 01MDM
Дата сообщения: 04.02.2011 16:41
lorents
Нужно просто проверить наличие первого аргумента ( %1 ). Если его нет, то тогда по умолчанию папка Images:

Код:
@echo off
setlocal

if "%1"=="" (

set "params=.\images\*.png"

) else (

2>nul pushd %* && set "params=%*\*.png" || set "params=%*"
popd

)

for /f "delims=" %%i in ('dir /b /s /a-d %params%') do call ImageCatalyst.bat "%%~fi"
Автор: lorents
Дата сообщения: 04.02.2011 17:42
01MDM
мне надо прописать в самом ImageCatalyst.bat чтобы он понимал "%%~fi"?
Автор: 01MDM
Дата сообщения: 04.02.2011 17:47
lorents
Для ImageCatalyst.bat "%%~fi" будет первым аргументом - %1
Автор: Mark_Titov
Дата сообщения: 04.02.2011 18:50
Доброго вечера всем...
Подскажите что не так - нужно что бы команда отрабатывалась паралельно.
Паралельно с оперой запускается батник для чистки мусора всякого и соответственно он создает процесс "cmd.exe" и нужно что бы после запуска оперы и очистки мусора этот процесс убивался...
А получается что убивается он только после того как закрывается опера.
Пишу так -
call "C:\Program Files\Opera\opera.exe" && taskkill /f /im "cmd.exe"
Поправьте меня пож-ста...
Благодарю...
Автор: Free_Soft
Дата сообщения: 04.02.2011 19:11
Mark_Titov
или опера из этого же батника запускается?
тогда
Код: Start ""... (как написали ниже)
<здесь остальные команды>
exit
Автор: yurkesha
Дата сообщения: 04.02.2011 19:17
Mark_Titov
start "" "C:\Program Files\Opera\opera.exe"
Автор: Free_Soft
Дата сообщения: 04.02.2011 19:42
а как в середине батника можно "разыменовать" аргумент %1?
Автор: Mark_Titov
Дата сообщения: 04.02.2011 19:45
yurkesha Free_Soft
Супер..! Спасибо..!
Автор: lorents
Дата сообщения: 04.02.2011 21:17
01MDM
не много не то, я на прошлой странице выкладывал ImageCatalyst.bat
Я как понимаю, с начало ImageCatalyst.bat должен получить таблицу с путями всех изображений PNG, т.к. при каждом новом %1 ImageCatalyst.bat запускается по новой, а мне это не нужно.

после того как он ее получит всю таблицу с данными ImageCatalyst.bat должен начать свою работу, и как бы будет брать данные об изображениях уже у себя.
Автор: 01MDM
Дата сообщения: 04.02.2011 22:32
lorents

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

Тогда я не понимаю зачем нужен этот батник, который с драгдропом? Запихни все в imagecatalist. Или ты хочешь его сделать универсальным, а для обработки параметров использовать внешний?

Вижу два пути как организовать. Первый использовать в качестве хранилища путей к файлам временный файл, т.е. в params.cmd создается временный файл с путями, основной батник принимает его в качестве аргумента и обрабатывает как любой текстовый файл. Либо, создается коллекция переменных с путями к файлам ( а ля массив ), и запускается imagecatalist, который наследует эти переменные. Так что?

Например так:

Код:
@echo off
setlocal

if "%1"=="" (

set "params=.\images\*.png"

) else (

2>nul pushd %* && set "params=%*\*.png" || set "params=%*"
popd

)

1>"%temp%\list.txt" dir /b /s /a-d %params%
call imagecatalist "%temp%\list.txt"
del "%temp%\list.txt"
Автор: lorents
Дата сообщения: 04.02.2011 22:51
01MDM

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

Именно, я хочу сделать, чтобы пользователь сам указывал, откуда брать файлы для оптимизации. Я думал о первом варианте, но мне не очень хочется его делать, хотя он прост в реализации.
А можно по подробнее о втором варианте? Здесь есть как бы две категории файлов, *.png и *.jpg *.jpeg *.jpe. Выходит надо создавать массива. и уже оттуда imagecatalist будет получать всю информацию.

Эти примеры надо в ImageCatalyst.bat или в отдельный bat, я не совсем понял?
Автор: 01MDM
Дата сообщения: 04.02.2011 23:09
lorents
А чего поподробней? Просто сам попробуй чтоб понять мысль. Создаешь два батника params.cmd и main.cmd

Код:
:: params

@echo off
setlocal

for /f "tokens=*" %%i in ('dir /b /s /a-d *.*') do call:set "%%~fi"
call main.cmd
goto:eof

:set
set /a cnt+=1
set "file_%cnt%=%1"
Автор: lorents
Дата сообщения: 04.02.2011 23:37
01MDM

Цитата:
А чего поподробней?

это я еще написал тогда, когда еще не видел пример. Спасибо большое.
Я хотел спросить, а нельзя все действия чтобы происходили в ImageCatalyst.bat (он как бы создавал массив)?
Автор: 01MDM
Дата сообщения: 05.02.2011 00:08
lorents
Нет, не получится. Тогда надо отказаться от батника, который получает параметры от пользователя и все организовывать непосредственно в каталисте, я не пойму чем это плохо. Можно сделать ветвление на проверку выбранных файлов (png или jpeg) и по результатам выполнять нужное действие.
Автор: lorents
Дата сообщения: 05.02.2011 08:45
01MDM

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

именно это и хочу сделать. надо будет сегодня этим мне заняться.
Автор: Mark_Titov
Дата сообщения: 06.02.2011 10:06
Подскажите плиз сточку проверки размера файла. (раньше не приходилось)
Нужно если файл пустой (0 байт) - то goto: stop а если есть там что то goto: start.
Благодарю...
Автор: 01MDM
Дата сообщения: 06.02.2011 10:20

Код:
for %%i in (file.ext) do if %%~zi equ 0 goto:stop
Автор: AndyFox
Дата сообщения: 06.02.2011 15:23
Помогите решить такую задачу (думаю, решение пригодится не только мне, но и многим другим):
1) В папке А находится большое количество файлов.
2) Файлы с такими же именами присутствуют и в других папках, пути к которым необходимо найти, и заменить эти найденные файлы на такие же файлы но из папки А. (любой файл из папки А может находиться в нескольких неизвестных папках).

Задача возникла по причине потребности замены большого количества системных файлов XP, раскиданных по разным папкам, файлами с идентичными именами, но других версий, собранных в одной папке (имею ввиду папку А, где собраны необходимые файлы, которые должны заменить собой, найденные такие же файлы в системе).

p.s. Понимаю, что знатокам, эта задача не покажется сложной, но я, к сожалению, быстро с ней не справлюсь, а рабочий комп надо сделать сегодня ((
Автор: 01MDM
Дата сообщения: 06.02.2011 15:44
AndyFox

Код:
@echo off

for /f "tokens=*" %%i in ('dir /b /s /a-d "A"') do (

for /f "tokens=*" %%j in ('dir /b /s /a-d "\%%~nxi"') do (

    if not "%%j"=="%%i" echo copy /y "%%i" "%%j"

)

)
Автор: lorents
Дата сообщения: 07.02.2011 08:19
Доброе утро!

Код: @echo off

pushd "%~dp0\"

set Docs="%~dp0Tools\"
PATH %Docs%;%PATH%

for /f "delims=" %%i in ('dir /b /s /a-d Temp\*.*') do (
    "Tools\advzip.exe" -t "%%~fi"
    if errorlevel 1 (
        echo. 123
    ) else (
        "%ProgramFiles%\7-Zip\7z.exe" x "%%~fi" -o%%~di%%~pi%%~ni\
        echo %%~di%%~pi%%~ni
        pause
        del /f /q "%%~fi"
        pushd "%~dp0%%~di%%~pi%%~ni\"
        
        kzip -y -r -s4 "%Temp%\ZipTemp.tmp" "*.*"
        pushd "%~dp0\"
        move /y "%Temp%\ZipTemp.tmp" "%%~fi"
    )
)

pause
Автор: Free_Soft
Дата сообщения: 07.02.2011 10:00
lorents

Цитата:
как убрать строку echo. 123, мне нужно только условие, если ошибка не возникает



Код: @echo off

pushd "%~dp0\"

set Docs="%~dp0Tools\"
PATH %Docs%;%PATH%

for /f "delims=" %%i in ('dir /b /s /a-d Temp\*.*') do (
"Tools\advzip.exe" -t "%%~fi"
if not errorlevel 1 (
"%ProgramFiles%\7-Zip\7z.exe" x "%%~fi" -o%%~di%%~pi
del /f /q "%%~fi"
pushd "%~dp0%%~di%%~pi"
echo %%~di%%~pi
kzip -y -r -s4 "%Temp%\ZipTemp.tmp" "*.*"
pushd "%~dp0\"
move /y "%Temp%\ZipTemp.tmp" "%%~fi"
)
)

pause
Автор: lorents
Дата сообщения: 07.02.2011 10:30
Free_Soft
Спасибо. Разобрался

Цитата:
переменная %~dp0 и так содержит слеш в конце

ошибка была %~dp, в моем случаи надо было написать pushd "%%~di%%~pi\"
Автор: gammaray
Дата сообщения: 08.02.2011 15:28
Уважаемые специалисты, нужна Ваша помощь!
Ситуация такая. Есть расшаренные папка \\server\folder
Раньше к ней подключались через логин условно login1. Теперь надо подключаться через login2. Но в механизме Сохранения имен пользователей и паролей осталась старая запись login1.
Пишу такой бат-файл:

Код: net use * /delete /y
net use /persistent:yes
net use z: \\server\folder /user:login2
Автор: res2001
Дата сообщения: 08.02.2011 15:37
gammaray
По твоей ссылке описано использование утилиты "Учетные записи пользователей", которая запускается командой: control userpasswords2
Выполни эту команду, откроется оконо "Учетные записи пользователей", перейди на закладку "Дополнительно", жми кнопку "управление паролями" и добавь новый набор ресурс/логин/пароль.

Другой вариант - вставить твой батник в автозагрузку
Автор: Accessor
Дата сообщения: 08.02.2011 17:33
res2001
Цитата:
добавь новый набор ресурс/логин/пароль.
Может новый набор добавлять и не надо. А вот старый удалить нужно.gammaray команда, по идее должна выглядеть так:
net use z: \\server\folder /user:login2 /persistent:yes

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

Предыдущая тема: зависает установка Windows XP: 39 минут


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