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

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

Автор: Elroir
Дата сообщения: 22.01.2007 08:22
Tipulatoid
Все так, но там надо было заменить строчку, а здесь вставить. Т.е. в коде, который ты привел, надо убрать else - заменить

Код: else (echo %%a>>tmp_file)
Автор: Tipulatoid
Дата сообщения: 22.01.2007 08:33
Elroir
Да, точно, не до конца понял вопрос Maza Faka

Автор: Maza Faka
Дата сообщения: 22.01.2007 09:16
Elroir

Цитата:
Может так:
Код: title ! ! ! ! ! ! ! ! ! ! НЕ ЗАКРЫВАТЬ ! ! ! ! ! ! ! ! ! !
Автор: Elroir
Дата сообщения: 22.01.2007 10:13
Maza Faka

Цитата:
setlocal enabledelayedexpansion
, что означает эта команда, а то в справочниках не смог найти...

Я отвечал на этот вопрос на 28-й странице:

Цитата:
В обычном случае, чтобы узнать значение переменной окружения, надо воспользоваться конструкцией %переменная%. Однако, если значение переменной меняется внутри цикла и читается там же, то для корректной работы батника, нужно использовать команду setlocal enabledelayedexpansion и вместо символа "%", использовать символ "!". Иначе, значение переменной в цикле будет всегда одним и тем же - таким, каким было до входа в цикл.



Добавлено:
А сам код выполняет следующие действия:
1. Устанавливает переменную count равной 1.
2. Для каждой строчки в тексте:
- проверяет равен ли номер строчки 3, если да - пишет в файл строчку "System".
- пишет считанную строчку в файл
- увеличивает переменную count на 1.
Автор: AZJIO
Дата сообщения: 23.01.2007 09:05
yurkesha
Спасибо
Используя этот скрипт

Цитата:
FOR /F "usebackq tokens=1 eol= skip=1 delims= " %%a IN (`help^|findstr /B /V /C:" "`) DO help %%a >>%%a.txt

получил файлы, которые перекодировал в кодировку Windows, и сделал удобный HTML-справочник. Вот ссылка: http://www.rapidshare.ru/151926
Автор: ViSiToR
Дата сообщения: 23.01.2007 09:40
Elroir

Цитата:
В обычном случае, чтобы узнать значение переменной окружения, надо воспользоваться конструкцией %переменная%. Однако, если значение переменной меняется внутри цикла и читается там же, то для корректной работы батника, нужно использовать команду setlocal enabledelayedexpansion и вместо символа "%", использовать символ "!". Иначе, значение переменной в цикле будет всегда одним и тем же - таким, каким было до входа в цикл.

Имхо, нужно в шапку поместить новый раздел, что-то вроде “Пользовательские описания комманд” (ПОК) - и помещать туда ссылки на такие описания как ты привёл для этой команды.


AZJIO

Цитата:
Вот ссылка:

Жду 30 сек., и вижу это:


Цитата:
Время действия ссылки истекло, либо она была выдана не вам. Кликните сюда для получения новой ссылки


Можешь перезалить? например на http://www.sendspace.com/
Автор: JekaRus
Дата сообщения: 23.01.2007 13:12
Как с помощью Bat файла удалить все файлы в папке %systemroot%\Temp на удаленной машине если имя папки с системой неизвестно, то есть оно каждый раз разное, либо WINDOWS, либо WINNT или еще какое нибудь. Шара ADMIN$ тоже отключена.
Автор: Elroir
Дата сообщения: 23.01.2007 13:57
ViSiToR и All
Добавил в шапку блок Описания работы команд участниками темы.
Просьба - пройдитесь по топику и поищите сообщения, которые можно было-бы добавить в этот блок.

Автор: Tipulatoid
Дата сообщения: 23.01.2007 14:56
Имеется, допустим, такой файл temp7.txt

Код: SAGA 61,00 231,11
PlayGirl 78,09 356,05
Уфа -8,84 -119,77
BSC КФХ Славинка 43,23 339,95
Raul Gonsalez 58,07 344,30
Last champion 60,43 354,80
Автор: AZJIO
Дата сообщения: 23.01.2007 21:15
ViSiToR
Вот новая ссылка... проверил.
http://www.sendspace.com/file/w3ocs7
rapidshare.de почему-то у меня перестала работать, а rapidshare.ru я проверил, закачка была.

Есть ли способ включить кодировку? CHCP [nnn] - ? Иначе приходится для создания папок использовать перекодирование в DOS. Попробовал 866, ничего не получилось.

Цитата:
xcopy "%UserProfile%\€§Ўа --®Ґ" "%backup%\Documents and Settings\Administrator\€§Ўа --®Ґ" /E /H /K
xcopy "%UserProfile%\ѓ« ў-®Ґ ¬Ґ-о" "%backup%\Documents and Settings\Administrator\ѓ« ў-®Ґ ¬Ґ-о" /E /H /K

Автор: ViSiToR
Дата сообщения: 23.01.2007 22:01
AZJIO

Цитата:
Вот новая ссылка... проверил.

Спасибо. Действительно очень удобно получилось - всем советую скачать (27.2 kb), это намного лучше просматривать справку в таком виде, чем в консольном окне (и по необходимости можно скопировать нужную инфу).


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

CHCP 1251 должно помочь.
Автор: yurkesha
Дата сообщения: 23.01.2007 22:11
Ну не знаю - по мне так в виде предложенном Jon_Dow удобнее... Опять же поиск в FAR рулит, копирование без вопросов, открытие нескольких файлов с переключением между нини тоже влегкую...
И главное - одна строка на все про все - я ее даже воспроизвести по памяти уже почти могу
Но конечно ежли сравнивать с чиcтой консолью то таки да удобнее
Автор: MMCDion
Дата сообщения: 24.01.2007 07:07
Подскажите, какую команду надо написать в батнике, чтобы выполнить сетевое подключение?
Подключение ADSL по локальной сети.
По прикреплённой вверху ссылке "Запуск сетевого подключения" не получается.
Или может есть возможность запустить ярлык на рабочем столе через bat-файл.
Путь до ярлыка что-то типа C:\DOCUME~1\0016~1\KRASNE~1.LNK
Если этот путь вводишь в командной строке, то всё ОК, соединение подключается, а через батник не получается...
Автор: regular
Дата сообщения: 24.01.2007 12:01
Всем привет!
Интересная задачка появилась.
Есть текстовый файл. Как все буквы перевести в верхний регистр?
Автор: Elroir
Дата сообщения: 24.01.2007 13:31
regular

Цитата:
Интересная задачка появилась.

Для кого интересная?

Код:
@echo off
setlocal enabledelayedexpansion
del /q tmp_rep.txt 2>nul
FOR /f "tokens=*" %%a IN (test.txt) DO (
SET string=%%a
SET string=!string:q=Q!
SET string=!string:w=W!
SET string=!string:e=E!
SET string=!string:r=R!
SET string=!string:t=T!
SET string=!string:y=Y!
SET string=!string:u=U!
SET string=!string:i=I!
SET string=!string:o=O!
SET string=!string:p=P!
SET string=!string:a=A!
SET string=!string:s=S!
SET string=!string:d=D!
SET string=!string:f=F!
SET string=!string:g=G!
SET string=!string:h=H!
SET string=!string:j=J!
SET string=!string:k=K!
SET string=!string:l=L!
SET string=!string:z=Z!
SET string=!string:x=X!
SET string=!string:c=C!
SET string=!string:v=V!
SET string=!string:b=B!
SET string=!string:n=N!
SET string=!string:m=M!

echo !string!>>tmp_rep.txt
)
rem del /q test.txt
rem ren tmp_rep.txt test.txt
Автор: Orm
Дата сообщения: 24.01.2007 13:51
Задача. Программа создает папки в виде текущей даты DDMMYYYY. Внутри этой папки есть некоторая жестко заданная иерархия папок. Внутри одной из них регулярно создаются файлы. Нужно, просмотреть структуру папок, сравнить с текущей датой, и из одной папки скопировать самый свежий файл.
Автор: Elroir
Дата сообщения: 24.01.2007 14:27
Orm
Приведи пример - структуру папок, изменение и что нужно найти и скопировать.
Автор: evgeni666
Дата сообщения: 24.01.2007 15:56
Представленный в ветке пример вычисления предыдущей даты не учитывает високосные года, что в следующем году почувствуют многие

Вот правильный алгоритм расчета предыдущей даты.


Цитата:

@echo off
for /f "skip=2 tokens=2*" %%i in ('reg QUERY "HKCU\Control Panel\International" /v sDate') do set sdate=%%j
for /f "delims=%sdate% tokens=1,2,3" %%i in ("%DATE%") do call :getpackage %%i %%j %%k

:: проверочка
echo %year%
echo %month%
echo %day%
echo %package%


:: тут можно поместить необходимые нам команды

goto :EOF

:getpackage
set day=%1
set month=%2
set /a year=%3
set lastdays="31 28 31 30 31 30 31 31 30 31 30 31"
if %day% leq 9 set /a day=%day:~-1%
if %month% leq 9 set /a month=%month:~-1%
set /a day-=1
if "%day%"=="0" set /a month-=1
if "%month%"=="0" set /a month=12,year-=1
set /a isleap="(year%%4)&((year%%100)|(year%%400))"
if "%isleap%"=="0" set lastdays=%lastdays:28=29%
if "%day%"=="0" for /f "tokens=%month%" %%i in (%lastdays%) do set day=%%i
if %day% leq 9 set day=0%day%
if %month% leq 9 set month=0%month%
set package=%year%-%month%-%day%
goto :EOF

Автор: Elroir
Дата сообщения: 24.01.2007 18:10
evgeni666

Цитата:
Также он не зависит от используемого в системе представления даты.

Зависит, зависит. Попробуй запустить его, когда системная дата выглядит так - Wed 24.01.07. Или когда месяц идет перед числом - 01.24.07 (что в западных странах происходит довольно часто).
Автор: yurkesha
Дата сообщения: 24.01.2007 20:09
Ну если так ставить вопросы - довелось мне как-то писать скрипт чтоб не зависел от представления даты: [more]
Код: rem Экспорт конретного значения параметра в переменную окружения
FOR /f "usebackq tokens=2* skip=4" %%a IN (`reg query "HKCU\Control Panel\International" /v sShortDate`) DO IF "%%a"=="REG_SZ" SET temp_data_format=%%b

rem Удаление файла в который будем экспортить старые значения из реестра
if exist data_format.reg del data_format.reg

rem Формирование reg-файла с сохраненным значением
echo Windows Registry Editor Version 5.00 >>data_format.reg
echo. >>data_format.reg
echo [HKEY_CURRENT_USER\Control Panel\International] >>data_format.reg
echo "sShortDate"="%temp_data_format%" >>data_format.reg

rem Удаление файла в который будем экспортить новые значения для импорта в реестр
if exist new_data_format.reg del new_data_format.reg

rem Формирование reg-файла с новым значением
echo Windows Registry Editor Version 5.00 >>new_data_format.reg
echo. >>new_data_format.reg
echo [HKEY_CURRENT_USER\Control Panel\International] >>new_data_format.reg
echo "sShortDate"="yyyy.MM.dd" >>new_data_format.reg

rem Импорт нового значения
reg import data_format.reg

rem Тело основного скрипта с учетом нового значения из реестра

rem Импорт сохраненного значения
reg import data_format.reg
Автор: Orm
Дата сообщения: 25.01.2007 00:24
Elroir
Легко. Прога создает, как я уже писал, папки с именем DDMMYYYY. Т.е. сегодня это уже 25012007, внутри две папки IN и OUT. В OUT периодически появляется файлы вида 1xxxxxx.01, 1xxxxxx.02, 1xxxxxx.03. Нужно чтобы раз в пять минут сканировала папку соответствующей сегодняшней дате, и из папки OUT копировала файл с последней датой создания. Курил в сторону nnbackup, но пока не еще не раскурил...
Автор: Elroir
Дата сообщения: 25.01.2007 08:42
Orm
Вот теперь понятно. Еще вопрос - каков формат системной даты, т.е. что выдает команда "echo %date%" ?
Автор: evgeni666
Дата сообщения: 25.01.2007 09:01
Elroir
Уговорил. Зависит. Поправил текст своего сообщения.

Надо покумекать, как получать дату в таком разе...
Автор: Elroir
Дата сообщения: 25.01.2007 09:08
evgeni666
Я пытаюсь придумать, как бы анализировать системную дату и уже основываясь на этой информации строить код. Способ изменения реестра, который предложил yurkesha, использовать не хочется (да и не всегда есть права на запись в реестр). Идеи?
Автор: Orm
Дата сообщения: 25.01.2007 09:18
Elroir
echo %date%
25.01.2007
Автор: IGorAS
Дата сообщения: 25.01.2007 09:42
а можно решить такую задачу:
пинговать все машины в одной сети, с параметром -т, каждые полчаса записывать показания пингов в лог-файл, не удаляя предыдущие записи.
Если можно то создавать лог файл отдельно для каждого компа, а имя файла должно соответствовать ip адресу машины. Я понимаю идея бредовая, но вдруг???
Автор: evgeni666
Дата сообщения: 25.01.2007 10:02
Elroir
Можно получить формат даты, по которому формируется вывод

Цитата:

for /f "skip=2 tokens=2*" %%i in ('reg QUERY "HKCU\Control Panel\International" /v sDate') do set sdate=%%j
for /f "skip=2 tokens=2*" %%i in ('reg QUERY "HKCU\Control Panel\International" /v sShortDate') do set sshortdate=%%j
for /f "delims=%sdate% tokens=1,2,3" %%i in ("%sShortDate%") do echo %%i %%j %%k


теперь можно формат разбирать.
но я не могу найти, где хранится, выводить день недели или нет. на компе, который выводит день недели, формат короткой даты такой же, как и на том, который не выводит.

Добавлено:
IGorAS
а просто пинговать раз в полчаса не катит?
Автор: Elroir
Дата сообщения: 25.01.2007 10:24
Orm
Получилось так:

Код:
@echo off
setlocal

:: Path where the date folders are
set work_in_path=c:\temp\
:: Path for copy
set copy_to_path=c:\temp\

:copy
:: Setting work folder
set work_folder=%date:.=%

:: Change directory to DATE\out folder. If not exists wait
pushd %work_in_path%%work_folder%\out 2>nul
if %errorlevel%==1 goto nofolder

:: Finding the name of the file with last creation date
for /f "usebackq tokens=1" %%a in (`"dir /a-d /od /tc /b"`) do set fname=%%a

:: Copying the file
copy /y "%fname%" "%copy_to_path%">nul
popd

:wait
::Waiting 5 minutes
ping -n 300 -w 1000 127.0.0.1>nul
goto copy

:nofolder
echo Working folder is not found. Waiting...
goto wait
Автор: igor_andreev
Дата сообщения: 25.01.2007 10:35
Elroir

Цитата:
Я пытаюсь придумать, как бы анализировать системную дату и уже основываясь на этой информации строить код.

А я же написал такой батник(zip, 1Kb) тут на форуме, ты не видел? Кода многовато, но в большинстве случаев(процентов 98 основных форматов даты) на 2000/XP/2003 выведет правильно день-месяц-год.
Автор: Elroir
Дата сообщения: 25.01.2007 10:49
igor_andreev

Цитата:
А я же написал такой батник(zip, 1Kb) тут на форуме, ты не видел?

Ты знаешь, видел, но забыл.
Это было в начале первой части топика, а я тогда еще не следил за "развитием событий" . Я потом просматривал сначала, но не разбирал код.

Добавлено:
Красивый батник!

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Сбой активации XP sp2


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