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

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

Автор: lorents
Дата сообщения: 25.01.2011 23:07
Добрый вечер!

Код: @echo off
setlocal enabledelayedexpansion

set Docs="%~dp0Docs\"
PATH %Docs%;%PATH% >nul

zipmix /y 7z.zip Rar.zip %1
del 7z.zip >nul
del Rar.zip >nul
advzip -z -4 %1
Автор: res2001
Дата сообщения: 26.01.2011 10:00
lorents

Цитата:
Подскажите, пожалуйста, почему мой bat ищет архивы 7z.zip и Rar.zip в папке %HOMEPATH%, как сделать чтобы он искал эти архивы в той же папке что и сам bat?

Видимо текущий каталог - это не каталог где батник запущен, потому и не ищет там.
Автор: wolf0425
Дата сообщения: 26.01.2011 10:12

Цитата:
как сделать чтобы он искал эти архивы в той же папке что и сам bat?

например сделать каталог с батником - текущим: pushd "%~dp0"
или переписать батник так, чтобы он искал архивы не в текущем каталоге, а в каталоге с батником.
Невредно также добавить в батник отладочную печать %1 - чтобы удостовериться что параметром передается имя без указания пути.

для каких целей в вышеприведенный батник вписаны строки
set Docs="%~dp0Docs\"
PATH %Docs%;%PATH% >nul
- мне напрочь не понятно, разве что кому-то нравится хранить утилиты zipmix и advzip именно в папке Docs\ (да и в этом случае непонятно зачем промежуточное присваивание).
и >nul там не влияет совершенно ни на что...

Автор: lorents
Дата сообщения: 26.01.2011 12:27
wolf0425
Спасибо. пойду разбираться.

Цитата:
- мне напрочь не понятно, разве что кому-то нравится хранить утилиты zipmix и advzip именно в папке Docs\ (да и в этом случае непонятно зачем промежуточное присваивание).

а что в этом плохого?

Цитата:
и >nul там не влияет совершенно ни на что...

это для того чтобы не отображать процессы в окне batch

Добавлено:

Цитата:
Невредно также добавить в батник отладочную печать %1 - чтобы удостовериться что параметром передается имя без указания пути.

а что это такое?
Автор: greydjin
Дата сообщения: 26.01.2011 15:10

Код: for /f "delims=" %%I in (filelist.log) do start %systemdrive%:\update\%%I
Автор: wolf0425
Дата сообщения: 26.01.2011 16:07

Цитата:
а что в этом плохого?
да как-то в каталоге с именем Docs чаще ожидают увидеть например документацию, а не какие-то утилиты. Уж не знаю почему.


Цитата:
это для того чтобы не отображать процессы в окне batch
команда path и без перенаправления ничего не отображает. Тем более она не отображает никаких процессов.


Цитата:
а что это такое?
ты о чем? о отладочной печати знает гугл, о %1 - предполагается что должен знать ты...
строку echo.%1 воткни в код для отладки, если не понятно






Автор: bredonosec
Дата сообщения: 26.01.2011 16:16
кто напомнит -
чтоб запустить сервис на удаленном, надо
sc \\%1 start [servicename /parameters]

а чтоб выполнить задачу - что писать? тоже старт?
напр, если локально команда звучит как
w32tm /resync /rediscover
- синтаксис удаленный будет
sc \\%1 start w32tm /recync /rediscover
?

Или какой? (%1 - переменная, имя компа туда передается, для краткости)

Добавлено:
или тут уже psexec юзать надо?
Автор: res2001
Дата сообщения: 26.01.2011 16:36
bredonosec

Цитата:
или тут уже psexec юзать надо?

надо
Автор: 01MDM
Дата сообщения: 26.01.2011 16:41
bredonosec

Цитата:
или тут уже psexec юзать надо?

Да, sc управляет сервисами. Возможен вариант с wmic, как-то так:

Код:
WMIC /node:"IP or CompName" /user:"username" /password:"password" process call create notepad.exe
Автор: lorents
Дата сообщения: 26.01.2011 20:10
wolf0425
Благодарю, пойду разбираться.
Автор: Free_Soft
Дата сообщения: 27.01.2011 08:49
Можно как-то следующее

Код: :rgs
for %%a in (%DNSlist%) do set DNSadress=%%a&& call:sub
goto:b
:sub
for /f %%a in ('cscript //nologo DNSreg.vbs %DNSadress%') do set DNSr=%%a
if /i "%DNSr%" == "0" echo KMS emulator succssefully registered at address %DNSadress%. & goto:b
if /i "%DNSr%" == "1" echo Insufficient access rights for DNS server. Adress: %DNSadress%
if /i "%DNSr%" == "2" echo <_vlmcs._tcp> record for this computer already registered.
if /i "%DNSr%" == "3" echo Cannot register A record for host in DNS. Adress: %DNSadress%.
goto:eof
:b
echo All is Ok.
exit /b
Автор: wolf0425
Дата сообщения: 27.01.2011 09:46
Free_Soft наверно так:

Код: @echo off
:rgs
for %%i in (%DNSlist%) do for /f %%a in ('cscript //nologo DNSreg.vbs %%i') do (
    if /i "%%a" == "0" echo KMS emulator succssefully registered at address %%i.
    if /i "%%a" == "1" echo Insufficient access rights for DNS server. Adress: %%i
    if /i "%%a" == "2" echo ^<_vlmcs._tcp^> record for this computer already registered.
    if /i "%%a" == "3" echo Cannot register A record for host in DNS. Adress: %%i.
)
echo All is Ok.
exit /b
Автор: Free_Soft
Дата сообщения: 27.01.2011 09:49

Цитата:
с _vlmcs._tcp было - след от кривой перекодировки 1251-оем

нет, все ок, это запись в DNS сервер
Автор: NeoNemesis
Дата сообщения: 27.01.2011 10:34
Такой вопрос: нужен командный файл, выполняющий поиск в каталоге и его подкаталогах, указанном первым параметром, файлов наибольшего и наименьшего размеров. Вывести имена файлов, их размеры и даты создания.

Вообще, код у меня уже есть:

@setlocal enabledelayedexpansion
@ECHO OFF
CLS
SET /a m=0
Set Name1=file
for /R %1 %%i IN (*.*) DO (IF %%~Zi GTR !m! (SET /a !m=%%~Zi
SET Name1=%%~NZTi))
Set Name2=file
SET /a n=!m!
for /R %1 %%i IN (*.*) DO (IF %%~Zi LSS !n! (SET /a !n=%%~Zi
SET Name2=%%~NZTi))
echo В каталоге %1 наибольший файл !Name1! !m! byte
echo В каталоге %1 наименьший файл !Name2! !n! byte
@endlocal enabledelayedexpansion
pause


но какой-то он уж больно громоздкий. Есть способ реализовать поставленную задачу более компактным батником?
Автор: Symrak
Дата сообщения: 27.01.2011 11:51
Ребята помогите!!!! Есть скрипт сортировки файлов по папкам согласно списку:


Код:

@Echo Off
SetLocal EnableDelayedExpansion
Set Source=%CD%\
Set Output=%CD%
Set UsersLog=%CD%\_List.txt

For /F "UseBackQ Tokens=*" %%A In ("%UsersLog%") Do (
    Echo %%A|FindStr :>nul&&(Set OutputDir=%%A&MD "%Output%\!OutputDir:~0,-1!" 2>nul)||Move /Y "%Source%\%%A.*" "%Output%\!OutputDir:~0,-1!" 1>nul
)
EndLocal

Автор: res2001
Дата сообщения: 27.01.2011 12:31
Symrak

Цитата:
Как сделать так чтобы файлы с восклицательным занком в имени тоже обрабатывались?

надо убрать эту строку
SetLocal EnableDelayedExpansion
и переделать батник так, чтоб работал без нее.

Добавлено:
NeoNemesis

Цитата:
Есть способ реализовать поставленную задачу более компактным батником?

можно обрабатывать вывод команды:
dir /O:S /-C /A:-D
первый файл будет самым маленьким, последний - самым большим.
Автор: NeoNemesis
Дата сообщения: 27.01.2011 12:45

Цитата:
dir /O:S /-C /A:-D
первый файл будет самым маленьким, последний - самым большим.


Не, задача состоит именно в том, чтобы выводились только самый малый и самый большой файлы (имена файлов, их размеры и даты создания) в заданном каталоге и его подкатологах.
Автор: res2001
Дата сообщения: 27.01.2011 13:03
NeoNemesis

Цитата:
и его подкатологах.

тогда так:
dir /O:-S /-C /A:-D /S /B

Добавлено:
Нет не пойдет, дир сортирует файлы внутри каждого каталога отдельно.

Ну тогда могу посоветовать только объединить два твоих цикла в один, не вижу смысла делать два прохода по одним и тем же каталогам.
Автор: bredonosec
Дата сообщения: 27.01.2011 13:28
01MDM

Цитата:
Да, sc управляет сервисами.

мне непонятно еще такое.. Почему-то, если я батником копирую на удаленную машину бат с командой перезапуска сервиса времени, а потом псексеком запускаю его - срабатывает. Пишет, что остановлена служба, запущена..
А если напрямую посылаю указания через sc остановить-запустить - пишет, что служба не может быть ни остановлена, ни поставлена на паузу, ничего.

Цитата:
SERVICE_NAME: w32time
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 3 STOP_PENDING
(NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x1
WAIT_HINT : 0x3e8

При попытке ресинхронизации также кидает ошибку

Цитата:
Sending resync command to local computer...
The following error occurred: The RPC server is unavailable. (0x800706BA)
C:\windows\system32\w32tm exited on (имя компа) with error code -2147023174.


почему? есть какие-то ограничения особые на то, как именно запускать?
Автор: Verter
Дата сообщения: 27.01.2011 14:10
Задача, Google books:
Нужно пройтись с файла 1.png по файл 100.png и если какого-то файла (например 53.png) не существует, то сделать copy _blank.png 53.png. Как реализовать?
Автор: res2001
Дата сообщения: 27.01.2011 14:38
Verter

Код: @echo off
for /l %%a in (1,1,100) do if not exist %%a.png copy /b/y _blank.png %%a.png
Автор: king_stiven
Дата сообщения: 27.01.2011 15:20
NeoNemesis

Цитата:
но какой-то он уж больно громоздкий.

У батника есть критерии надёжности и быстроты а ещё времени, затраченного на его написания, но никак не количества знаков.
Автор: Symrak
Дата сообщения: 27.01.2011 15:30
res2001


Цитата:
надо убрать эту строку
SetLocal EnableDelayedExpansion
и переделать батник так, чтоб работал без нее.


Не подскажеш как это сделать? Чесно говоря батник нашел в нете и для собственного использования подставляю пути в Source и Output.

Я так понял SetLocal EnableDelayedExpansion назначает использование папки из которой он запущен как корневую?

Так будет правельно?


Код:
@Echo Off

Set Source=C:\work\
Set Output=C:\out\
Set UsersLog=C:\_List.txt

For /F "UseBackQ Tokens=*" %%A In ("%UsersLog%") Do (
Echo %%A|FindStr :>nul&&(Set OutputDir=%%A&MD "%Output%\!OutputDir:~0,-1!" 2>nul)||Move /Y "%Source%\%%A.*" "%Output%\!OutputDir:~0,-1!" 1>nul
)
EndLocal
Автор: res2001
Дата сообщения: 27.01.2011 15:44
Symrak

Код:
@Echo Off
Set Source=%CD%\
Set Output=%CD%
Set UsersLog=%CD%\_List.txt

For /F "UseBackQ Tokens=*" %%A In ("%UsersLog%") Do (
Echo %%A|FindStr :>nul&&(Set OutputDir=%%A & call MD "%Output%\%%OutputDir:~0,-1%%" 2>nul) || call Move /Y "%Source%\%%A.*" "%Output%\%%OutputDir:~0,-1%%" 1>nul
)
Автор: king_stiven
Дата сообщения: 27.01.2011 15:45


Добавлено:
NeoNemesis
Вот есть у меня батник, отработал в 5 раз быстрее твоего, но раза в 3 громоздкее. )
Автор: Verter
Дата сообщения: 27.01.2011 21:02
res2001
Дико извиняюсь, думал детали уже сам дошлифую, но продолбился с "Ошибкой в синтаксисе команды". Исходная задача звучит так. Нужно пройтись с файла PA1.png по файл PA100.png в текущей папке и:
1) если файл (например PA67.png) существует - скопировать его в папку "2" которая лежит в текущем каталоге;
2) если файла (например РА13.png) НЕ существует - скопировать вместо него в папку "2" файл _blank.png.
Как это до-реализовать?
Автор: wolf0425
Дата сообщения: 27.01.2011 21:21
Verter
Код:
for /l %%a in (1,1,100) do 1>nul 2>nul copy /b/y pa%%a.png 2\ || copy /b/y _blank.png 2\pa%%a.png
Автор: kostyamks
Дата сообщения: 28.01.2011 13:05
Как исправить проблему с занесением данных в hosts фаил:

@echo off
cls
if "%OS%"=="Windows_NT" ( set hostfile=%systemroot%\system32\drivers\etc\hosts ) else ( set hostfile=%systemroot%\hosts )
echo.>> %hostfile%
echo 127.0.0.1 nero.com>> %hostfile%
echo 127.0.0.1 my.nero.com>> %hostfile%
echo 127.0.0.1 secure.nero.com>> %hostfile%
echo 127.0.0.1 support.nero.com>> %hostfile%
echo 127.0.0.1 registernero.com>> %hostfile%
ipconfig /flushdns
echo Overdone!
pause


Автор: Rush
Дата сообщения: 28.01.2011 13:14
kostyamks

Цитата:
Как исправить проблему с занесением данных в hosts фаил:

Скорее всего файл помечен read only.
вставь перед правкой файла:
attrib -r %hostfile%
а после правки
attrib +r %hostfile%
Автор: Free_Soft
Дата сообщения: 28.01.2011 15:11

Цитата:
Как исправить проблему с занесением данных в hosts фаил:

и батник надо запускать от имени Администратора

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

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


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