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

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

Автор: Elroir
Дата сообщения: 02.11.2006 12:01
Nordwig
1. В команде for, добавь параметр tokens=* в этом случае %%I получает строку файла от начала до конца.
2. Зачем нужен "delims=," ?
3. Не нужно ставить символ "@" перед каждой командой. Достаточно первой строчки - @echo off.
4. Некоторые специальные символы не могут быть выведены (без значка ^) командой echo.
5. Знак "=" у меня записался в файл нормально - пробовал такую строчку:
echo Device=Himem.sys >> file.
6. Для того, чтобы избавится от кавычек, можно воспользоваться модофикатором "~",
например set str=%~3 (это вместо set str=%3, set str=%str:~1,-1%).
7. Также есть модификатор для имени файла "~n" ( set name=%~n1.bak ).
Автор: Nordwig
Дата сообщения: 02.11.2006 13:03
все верно, tokens=* поставил, и раньше был, пропустил, тока показывает вместо строк знак "%i" (это в последней строке @echo %1 >> %name% вместо %1, а если осатвить %1, то тока до пробела)
Автор: Adriano86
Дата сообщения: 02.11.2006 15:18
а можно ли батником включить подключение по локальной сети? если да то как?
Автор: Snegov1k
Дата сообщения: 02.11.2006 15:40
Доброго времени суток!
Есть строка
FOR %%a in (C:\1\*.rar) do send.cmd %%a

вызывающая

Почтовик.EXE Всякие_параметры_отправки_и_присоединяющий(А)_файлы /A%1 и_еще_параметры.

в 2000 работает без проблемм, а вот в 2003 зависает при отправки 1го архива.

Есть ли разница в выполнении команд в win 2003 server и 200 ?
Автор: Elroir
Дата сообщения: 02.11.2006 18:40
Nordwig

Цитата:
а если осатвить %1, то тока до пробела

В строчке for, заключи в кавычки последний %%I (call :re "%%I"), а в последней строчке используй %~1 вместо %1 (echo %~1 >> %name%).
Автор: Nordwig
Дата сообщения: 02.11.2006 19:10
Elroir
респект!!!
получилось
Огромное спасибо
вот тока почему в хелпе не сказано про ковычки, или я не внимательно читал?
Буду дальше изучать!
Еще раз спасибо
Автор: sD31337
Дата сообщения: 02.11.2006 19:40
привет всем , никто незнает как бат файл склеить с ехе ? или с другим любым файлом
Автор: Elroir
Дата сообщения: 02.11.2006 19:48
sD31337
Что значит "склеить" ?
Автор: GryphonsEye
Дата сообщения: 02.11.2006 19:49
Предлагаю добавить в шапку

· Cmd. Описание от разработчиков на русском
Автор: Nagual
Дата сообщения: 02.11.2006 19:57
Elroir
Имя копмьютера что ли? да известно, но лучше имхо привязываться к маку, так как он наиболее стабильная зацепка, нежели имя компа, порт 8080.
Автор: sD31337
Дата сообщения: 02.11.2006 20:02
ну скрепть два файла и при запуске одного запускался второй )
Автор: Elroir
Дата сообщения: 02.11.2006 20:35
Nagual
Проблема в том, что простыми способами из MAC-а IP не получишь. В организациях, где это действительно надо - установлено спец. программное обеспечение для этих задач.
Если использовать имя сервера, то можно так:

Код:
@echo off
for /F "usebackq tokens=5 delims=[] " %%I IN (`"tracert SERVERNAME | find "Tracing""`) DO call :setproxy %%I
goto :EOF

:setproxy
echo %1
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyEnable" /t REG_DWORD /d 00000001 /f > nul
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyServer" /d %1:8080 /f > nul
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyOverride" /d "<local>" /f > nul
reg add "HKLM\SYSTEM\CurrentControlSet\Hardware Profiles\Current\Software\Microsoft\windows\CurrentVersion\Internet Settings" /v "ProxyEnable" /t REG_DWORD /d 00000001 /f > nul
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyEnable" /t REG_DWORD /d 00000001 /f > nul
Автор: sD31337
Дата сообщения: 02.11.2006 20:46
ну например я создал какойто *bat мне надо его замаскиравать самый ппростой способ я думаю это склеить его какой нить прогой с другим каким нить файлом , извеняюсь что не чисто по теме бат но все равно относится к ней) или может обьясните мне как скрыть содержание батника , чтобы было не так
///////////////////\пример\//////////////////////////
@echo off
mkdir............ и так далее а например так
цук34№;%№;%"№ ) ну чтоб никто не дагадался что в нем есть
еще
Автор: loat
Дата сообщения: 02.11.2006 21:01
помогите плс.

@echo off
if "%1"=="" goto exit
chcp 1251 > nul
for %%i in ( %1*.* ) do (
del "%%i" 2>nul > nul
if not exist %%i ( echo Файл "%%i" удален. ) else ( call :choice "%%i" )
)
goto exit

:choice
setlocal
set del_choice=
set /p del_choice=Файл %1 защищен от удаления. Удалить его?
if not '%del_choice%'=='' set choice=%choice:~0,1%
if /I '%del_choice%'=='Y' call :force %1
if /I '%del_choice%'=='Д' call :force %1
endlocal
goto exit

:force
del /f /q %1
echo Файл %1 удален.

:exit



вот батник который удаляет все файлы которые начинаються на букву которая задаеться параметром. А скрытые файлы спрашивает удалить или нет.
проблема в том что в cmd.exe вместо русских букв пишуться караказябры (winxpsp2 тестилось на 3х компах)
помогите пожалуйста исправить чтобы писалось по русски.
Автор: GaDiNa
Дата сообщения: 02.11.2006 21:21
loat
возможно ChCp 1251

?
Автор: Elroir
Дата сообщения: 02.11.2006 21:23
sD31337
Вот теперь понятно. Поищи в google, что-нибудь типа "bat to exe". Вот один из вариантов.

loat
1. Удали из кода строчку "chcp 1251 > nul"
2. Открой окошко cmd, там запусти edit. В открывшемся редакторе набери весь код. Это даст тебе русский язык в 866-ой кодовой странице.
3. Проверь как работает.
Автор: GaDiNa
Дата сообщения: 02.11.2006 21:43
Доброго времени суток.

Есть файли с именами такого вида:

bd0307370268_2006-11-02__08-02-35.674.bad
bd0307370269_2006-11-02__08-02-35.767.bad
bd0307370270_2006-11-02__08-02-35.955.bad

В имени этих файлов совпадает цифра 30737 - будем называть ее - КОД, и цифра 35 - будем называть ее СЕРИЯ ПАКЕТА.
Еще в имени каждого файла есть цифра стоящая после точки, но перед расширением, например 674 - назовем ее - НОМЕР ПАКЕТА.

В одном каталоге есть очень много наборов по три-четыре файла у которых совпадает КОД и СЕРИЯ ПАКЕТА.

например следующий набор:

bd0307370271_2006-11-02__08-02-36.298.bad
bd0307370272_2006-11-02__08-02-36.173.bad
bd0307370273_2006-11-02__08-02-36.048.bad

тут КОД тоже равен 30737, а СЕРИЯ ПАКЕТА = 36

В каждом наборе есть файл у которого НОМЕР ПАКЕТА наибольший.

Мне нужно написать такой скрипт, который удалит из этого каталога ВСЕ файлы кроме файлов с НАИБОЛЬШИМ НОМЕРОМ ПАКЕТА...

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

bd0307370270_2006-11-02__08-02-35.955.bad
bd0307370273_2006-11-02__08-02-36.048.bad

Посоветуйте что можно сделать..

Автор: Elroir
Дата сообщения: 03.11.2006 00:11
GaDiNa
Да... задачки у тебя.
Вот, что получилось:

Код:
@echo off
for %%I in (*.bad) DO call :аprocess %%I
goto :EOF

:аprocess
setlocal enabledelayedexpansion
set full_name=%1
set code=%full_name:~3,5%
set pser=%full_name:~31,2%
set pnum=%full_name:~34,3%
set bigger=%full_name:~34,3%
for %%J IN (???%code%*%pser%.???.bad) DO (
set name=%%J
set test=!name:~34,3!
if /I !test! GTR !bigger! ( set bigger=!test! )
)
for %%K IN (???%code%*%pser%.???.bad) DO call :аdel_small %%K %bigger%
goto :EOF

:аdel_small
set ntd=%1
set ntd_num=%ntd:~34,3%
IF NOT %ntd_num% EQU %2 del %1
Автор: VladimirKvach
Дата сообщения: 03.11.2006 04:36
sD31337

Я для склейки батника и каких-либо еще файлов в один exe-файл использую самораспаковывающийся архив winrar. У него есть фича запускать некую программу после распаковки, а саму распаковку проводить во временную папку, которая становится текущей, а после работы самоуничтожается.

Пример команды архивирования (склейки батника и друхих файлов в exe):

winrar a имяПолучаемогоEXE -sfx -ep1 -zcomment *.*

Содержимое файла comment:

tempmode
setup=имяТвоегоБатника
Автор: ViSiToR
Дата сообщения: 03.11.2006 09:41
VladimirKvach
Зачем так извращаться - Есть замечательная прога именно для компилляции батников (можно включать в екзешник дополнительные файлы) - Quick Batch File Compiler
Если нужно, могу залить, правда версия не из новых.
Автор: VladimirKvach
Дата сообщения: 03.11.2006 11:54
ViSiToR

Вообще я компилировал батник в exe не ради цели получить exe как таковой, а чтобы каким-либо образом пересылать на удаленный филиал один файл, чтобы не квалифицированный пользователь его запустил, при этом распаковались нужные файлы и записались в нужные места. При этом, если файл пересылается не полностью (из-за обрыва связи), то ничего вообще не происходит. Winrar с описанной выше технологией для этого вполне подходит.

А вообще автору вопроса теперь есть из чего выбрать.
Автор: Maza Faka
Дата сообщения: 03.11.2006 16:33
bat файл с таким содержанием:

For %%f in (*.mp3) do del %%f /Q

Почему не удаляются файлы с длинными и русскими именами? Может нужно какой нибудь параметр использовать?
Автор: BorlandIMHO
Дата сообщения: 03.11.2006 16:38
Maza Faka
Нужно в команде удаления %%f в кавычки заключить...
Автор: sD31337
Дата сообщения: 03.11.2006 23:00
ViSiToR
залей если не трудно 1snake1@mail.ru
спасибо
ViSiToR
Elroir
Спасибо вам огромно за то что помагаете таким ламакам как я )

Добавлено:
Всем првиет у меня два вопроса,
1 можно ли в одном батнике создать несколько сценариев ?
ну наприме @echo off
///////////
/ ///////////------пример команд)
///////////
//////////
end
и сразу же еще
@echo of
/////////////
/ ///////////
/////////
/////////////
end --------------------они будут работать ?
и второй вопрос скарей даже не вопрос а задача ) существует такой скрипт каторый открывает доступ к cmd в irc можно ли создать батник каторый бы создавал этот скрипт и кидал его в папку с MIRC ? ну например echo ----------<тот самый скрипт >script.vbs или что то типа того
xcopy "этот скрипт" в папку с Mirc по умолчанию на С:\Program Files\NeoRa\Trion ? Спасибо
Автор: ViSiToR
Дата сообщения: 04.11.2006 02:41
Maza Faka

Цитата:
Почему не удаляются файлы с длинными и русскими именами?

Следуй совету от BorlandIMHO, и в начало скрипта поставь chcp 1251:


Код:
chcp 1251
For %%f in (*.mp3) do del "%%f" /Q
Автор: userlow
Дата сообщения: 04.11.2006 13:04
FOR /F "tokens=1" %%i in (C:\inst\ipnew.txt) do (ping -n 1 %%i|find /I "TTL=">>nul
IF %ERRORLEVEL%==0 echo %%i>>C:\inst\set.txt)
Подскажите почему %ERRORLEVEL%=0 независимо доступен узел или нет,
где ошибка.
Заранее спасибо.
Автор: evle
Дата сообщения: 04.11.2006 13:15
userlow

Цитата:
Подскажите почему %ERRORLEVEL%=0 независимо доступен узел или нет,
где ошибка.

Переменные в процентах подставляются до выполнения строки (в данном случае строкой считается весь оператор for). Смотри пример "Разименовывание переменных" из шапки.
Автор: Maza Faka
Дата сообщения: 04.11.2006 16:01

Цитата:
Нужно в команде удаления %%f в кавычки заключить...

Пасибо выручил
Автор: userlow
Дата сообщения: 04.11.2006 17:29
Переменные в процентах подставляются до выполнения строки (в данном случае строкой считается весь оператор for). Смотри пример "Разименовывание переменных " из шапки.[/q]

Посмотрел раздел Разименовывание переменных
Как это может мне помочь.
Вернее ничего не понял о Разименовывание переменных.



Автор: Elroir
Дата сообщения: 04.11.2006 18:06
userlow
Перед "for", поставь строчку SETLOCAL ENABLEDELAYEDEXPANSION, a вместо %errorlevel% поставь !errorlevel!.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Вернуть библиотеку АТМ (поддержка шрифтов Type 1)


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