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

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

Автор: takt03
Дата сообщения: 16.01.2010 06:55
Всем привет! Тут такая проблема возникла пушу прогу для автоматического бекапа ICQ истории. В идеале прога должна делать:
Открывать папку user по умолчанию c:\Program Files\QIP\Users\
Открывать все папки которые там есть и если найдёт папку "History" то скопировать содержимое этой папки на фтп. В фоновом режиме (без отобржения процесса)
Вот что у меня пока получилось : 3 файла бат
1. start /min 2.bat (запускает 2рой фаел свёрнутым, единственно что нашол)
2. ftp -s:1.bat -i
exit (Очень важно писать выход иначе окно смд не исчезнет)
3.open ftp2.tusur.ru


cd /incoming/(потом идёт моя попка)
quote pasv (пассивный режим)
ascii (передача *.txt)
mput "C:\Program Files\QIP\Users\117442\History\*.*"
quit
Помогите реализовать:
Открывать все папки которые там есть и если найдёт папку "History" то скопировать содержимое этой папки на фтп. В фоновом режиме (без отобржения процесса)
2рая проблема.
Нужна маленькая программа для сканирования сети тоесть пинг 192.168.0.1 до 192.168.0.255 Все отклиунувшиеся машины записать в тхт файл и положить в туже папку где и исполняемый бат. СПасибо за внимание.
P.S Очень плохо знаю бат, если не сложно, опешите процессы. БУду очень благодарен!
Автор: mugil_cephalus
Дата сообщения: 16.01.2010 18:59
что имеем:
папка X:\44
в ней файлы (filenames) без расширения и с атрибутами:

1) simple - A
2) hid - AH
3) sys - AS
4) sys-hid - ASH

listing:

X:\44>dir /b/a-d/ah/as
sys
sys-hid

X:\44>

почему выводит файл с атрибутом "только S" - sys (AS), но не выводит файл с атрибутом "только H" - hid (AH) ?

резюмируя, в командах ключи с несколькими атрибутами обрабатываются по принципу "И" или "ИЛИ"
если "И" - не должно выводится sys (AS), а только sys-hid (ASH)
если "ИЛИ" - почему есть sys (AS) и нет hid (AH)
Автор: Kirillhome
Дата сообщения: 16.01.2010 21:40
mugil_cephalus
Похоже, ключ /A в команде DIR имеет не И, и не ИЛИ, а просто - действует последний :)

т.е. dir /b /ah /as выведет
Sys
Sys-Hid

а dir /b /as /ah выведет
Hid
Sys-Hid



takt03
По поводу второй задачи - смотрим шапку, находим # Администрирование, автоматизация и сеть », там видим · Пример выполнения команд по результату команды ping

Берём пример KapralBel и чуть-чуть переделываем

Код: @Echo Off
rem удалил файл, куда будем выводить информацию
if exist IP_OK.TXT del IP_OK.TXT
rem см. команду For /? для более полного описания
rem в данном случае - перебираем числа от 2 до 254 с шагом 1
rem и вызваем для каждого числа
rem процедуру CompWork с параметром 192.168.0.Полученное_Число
For /l %%a In (2,1,254) Do Call :CompWork 192.168.0.%%a
rem Идём на выход
GoTo :EOF

:CompWork
rem Пингуем, потом об откликнувшихся - пишем в файл
Ping -n 1 %1 >Nul
if ErrorLevel 1 GoTo :EOF
If ErrorLevel 0 (echo IP %1 is OK >> IP_OK.TXT)
GoTo :EOF
Автор: mugil_cephalus
Дата сообщения: 16.01.2010 21:52
Kirillhome
ты прав
X:\44>dir /b/a-d/as/ah
hid
sys-hid

X:\44>

никогда бы такой расклад не пришел бы в голову
спасибо

Добавлено:
Kirillhome
не знаешь, как одной командой dir получить в вывод все три файла

Цитата:

2) hid - AH
3) sys - AS
4) sys-hid - ASH

то есть
X:\44>dir ...
hid
sys
sys-hid

Автор: BorlandIMHO
Дата сообщения: 16.01.2010 23:05

Цитата:
Открывать все папки которые там есть и если найдёт папку "History" то скопировать содержимое этой папки на фтп
"открывать все папки" - не понял. Нужно найти все папки History и скинуть их содержимое на ftp? Тогда так

Код: @echo off
set FTPSERVER=somthere.in.the.net
set FTPUSER=username
set FTPPASSWORD=password
set "QIPUSERFOLDER=c:\Program Files\QIP\Users\"
set "FTPFOLDER=/incoming/дальше идёт моя папка"

echo open %FTPSERVER%>%dp0ftpscript.tmp
echo %FTPUSER% >>%dp0ftpscript.tmp
echo %FTPPASSWORD%>>%dp0ftpscript.tmp
echo cd "%FTPFOLDER%>>%dp0ftpscript.tmp
echo literal pasv>>%dp0ftpscript.tmp

for /F "delims=" %%A in ('dir /B /A:D "%QIPUSERFOLDER:~0,-1%"') do (
for /r "%%~dpnxA" %%B in (History) do (
echo lcd "%%~dpnxB">>%dp0ftpscript.tmp
echo mkdir "%FTPFOLDER%/%%~nxA">>%dp0ftpscript.tmp
echo cd "%FTPFOLDER%/%%~nxA">>%dp0ftpscript.tmp
for /F "delims=" %%C in ('dir /B "%%~dpnxB') do (
echo put "%%~nxB">>%dp0ftpscript.tmp
)
)
)
echo by>>%dp0ftpscript.tmp
ftp /s:%dp0ftpscript.tmp
exit
Автор: Kirillhome
Дата сообщения: 16.01.2010 23:26
mugil_cephalus
А нужно только имеющие эти атрибуты - или можно все????
если все, то просто
dir /b/a

(полное описание DIR)
Автор: wolf0425
Дата сообщения: 17.01.2010 05:13

Цитата:
если все, то просто
dir /b/a
лучше dir /b/a-d
Автор: takt03
Дата сообщения: 17.01.2010 06:50
BorlandIMHO спасибо. Как я вижу ты не только помог с решением проблемы но и подсказал как подключится к фтп из одного файла, за Это ОГРОМНОЕ СПАСИБО! Приступлю к тестированию.

Добавлено:
cd "/incoming/1>>dp0ftpscript.tmp
Непредвиденное появление: >>.
D:\111>

Пишет ошибку. Пробывал в другую директорию... Всё равно ошибка, даже пробовал в корень, всё равно та же ошибка.
Если не сложно можеш литературы дать, почитать. У меня только http://systemnews.com.ru/?mod=art&part=dos&id=001 И маленький справочник по батникам "echo (literal) pasv" такой команды не знаю (
Автор: wolf0425
Дата сообщения: 17.01.2010 08:47

Цитата:
cd "/incoming/1>>dp0ftpscript.tmp
Непредвиденное появление: >>.
а чего же ты хотел с незакрытой " ??
вообще правильный формат это
1>>"%~dp0ftpscript.tmp" echo cd /incoming/куда_надо
а то что выше понаписали просто провоцирует ошибки.

Добавлено:

Цитата:
"echo (literal) pasv" такой команды не знаю (
какой - команды echo в батнике или команды literal в ftp скрипте? или команды pasv в нем же?
встроенный хэлп cmd/ftp уже не помогает?
Автор: takt03
Дата сообщения: 17.01.2010 09:21
ftp> help
Допускается сокращение команд при вводе. Набор команд:

! delete literal prompt send
? debug ls put status
append dir mdelete pwd trace
ascii disconnect mdir quit type
bell get mget quote user
binary glob mkdir recv verbose
bye hash mls remotehelp
cd help mput rename
close lcd open rmdir
ftp>
Вчё что есть, без описаний итд..

Спасибо wolf0425 щас попробую.
Автор: wolf0425
Дата сообщения: 17.01.2010 09:46

Цитата:
Вчё что есть, без описаний итд..


Код: ftp> help literal
literal Send arbitrary ftp command
Автор: mugil_cephalus
Дата сообщения: 17.01.2010 09:54
Kirillhome
wolf0425
вы свидетели, зарекаюсь, - чтоб я еще хоть раз пользовал help из cmd - ни в жизнь, уже столько раз подводила, теперь и с dir - теперь только на hh ntcmds.chm
ничего в help'e cmd нет про "Если параметр /a указан без атрибутов, команда dir выводит имена всех файлов, включая скрытые и системные."
p.s.
не говоря уж про в который раз найденнные опечатки (сравните) :
dir /?
/B Вывод только имен файлов.
------
ntcmds.chm
/b
Перечисление каждого имени файла (включая расширение) или каталога на отдельной строке.
Автор: takt03
Дата сообщения: 17.01.2010 09:54
Как я понял :
echo open %FTPSERVER%>"%~dp0ftpscript.tmp"
echo %FTPUSER% >>"%~dp0ftpscript.tmp"
echo %FTPPASSWORD%>>"%~dp0ftpscript.tmp"
echo cd "%FTPFOLDER%">>"%~dp0ftpscript.tmp" echo cd /incoming/1
echo literal pasv>>"%~dp0ftpscript.tmp"

for /F "delims=" %%A in ('dir /B /A:D "%QIPUSERFOLDER:~0,-1%"')

do (
for /r "%%~dpnxA" %%B in (History) do (
echo lcd "%%~dpnxB">>"%~dp0ftpscript.tmp"
echo mkdir "%FTPFOLDER%/%%~nxA">>%dp0ftpscript.tmp"
echo cd "%FTPFOLDER%/%%~nxA">>"%~dp0ftpscript.tmp"
for /F "delims=" %%C in ('dir /B "%%~dpnxB') do (
echo put "%%~nxB">>"%~dp0ftpscript.tmp"
)
)
)
echo by>>"%~dp0ftpscript.tmp"
ftp /s:%dp0ftpscript.tmp
exit

Не чего не работает
wolf0425 Помоги правильно написать, пожалуйста.
Автор: mugil_cephalus
Дата сообщения: 17.01.2010 09:56
Kirillhome
wolf0425
X:\44>dir /b/a
hid
simple
sys
sys-hid

X:\44>

Добавлено:
слышал, что на bat-"языке" более-менее серьезного вируса не напишешь (разве что del ntldr или del sam - вредительство или поиск и ftp-пересылка *.dat с private info)

Цитата:
, что известная в свое время вирмейкерская группа Stealth (выпускавшая электронный журнал о вирусах Infected Voice) опубликовала исходный текст полиморфного вируса, написанного целиком на .bat-языке.
- Ссылка

Добавлено:
takt03

Цитата:
Если не сложно можеш литературы дать, почитать.

Уильям Станек - Командная строка Microsoft Windows http://rapidshare.com/files/89629093/Stanek_CLI_MS_Win.rar
Автор: wolf0425
Дата сообщения: 17.01.2010 10:49

Цитата:
не говоря уж про в который раз найденнные опечатки (сравните) :
dir /?
/B Вывод только имен файлов.
ага, заодно смотрим первоисточник:
Цитата:
dir /?
/B Uses bare format (no heading information or summary).
какая-то нездоровая тенденция: встроенные хэлпы на русском являются левой поделкой у половины микросовтовских программ. Хотя в изданных микрософтом отдельных мануалах - такой разницы с английскими нету.


Добавлено:

Цитата:
Как я понял :
echo cd "%FTPFOLDER%">>"%~dp0ftpscript.tmp" echo cd /incoming/1
ну откуда такой хвост подцепил?


Цитата:
for /F "delims=" %%C in ('dir /B "%%~dpnxB') do (
куда " потерял?


Цитата:
for /F "delims=" %%A in ('dir /B /A:D "%QIPUSERFOLDER:~0,-1%"')
do (
for /r "%%~dpnxA"
как думаешь, ~dp - должен там браться из астрала или откуда? в выводе dir /B /A:D - путей нет


Автор: takt03
Дата сообщения: 17.01.2010 11:32
mugil_cephalus
Спасибо за книгу. То что я так давно искал )
Автор: wolf0425
Дата сообщения: 17.01.2010 11:40

Цитата:
Открывать все папки которые там есть и если найдёт папку "History" то скопировать содержимое этой папки на фтп. В фоновом режиме (без отобржения процесса)
сожержимое какой папки надо скоприровать - папки "History" или папки юзера, соедржащей "History"? копировать всё с подпапками?
если весь мусор с подпапками - почему не скопировать всю папку "C:\Program Files\QIP\Users" ?

в общем - вот копирование только файлов из папок истории, проверяй.


Код: @echo off
set FTPSERVER=somthere.in.the.net
set FTPUSER=username
set FTPPASSWORD=password
set "QIPUSERFOLDER=c:\Program Files\QIP\Users\"
set "FTPFOLDER=/incoming/myfolder"

1>"%~dp0ftpscript.tmp" (
echo open %FTPSERVER%
echo %FTPUSER%
echo %FTPPASSWORD%
echo cd "%FTPFOLDER%"
echo literal pasv
)

for /D %%A in ("%QIPUSERFOLDER%*") do 1>>"%~dp0ftpscript.tmp" (
echo mkdir "%FTPFOLDER%/%%~nxA"
echo lcd "%%~fA"
Echo cd "%FTPFOLDER%/%%~nxA"
for /f "delims=" %%B in ('dir /b/s/a-d "%%~A\history\*"') do echo put "%%~nxB"
)
1>>"%~dp0ftpscript.tmp" echo by

ftp -i -s:"%dp0ftpscript.tmp"
exit
Автор: Black_Swan
Дата сообщения: 17.01.2010 13:33
Гуру помогите пожалуйста решением.
У меня следующая задача. Создать бат файлом инсталлятор который после запроса IP компьютера произведет удаленную установку на нем. У меня все уже готово и работает, но для полноты решения не хватает инструкции создания папки с ярлыками по пути "C:\Documents and Settings\All Users\Главное меню\Программы", затык в том что у eng версии винды (WinXP) путь другой, и переменных под него нет.

Помогите пожалуйста кодом, как вы решили бы эту задачу создавая локально такую папку.
У меня пока мыслей 0, или очень извращенные варианты...
Автор: mugil_cephalus
Дата сообщения: 17.01.2010 14:04
wolf0425
у меня (xp sp3 rus) в ntcmds.chm:
Del (erase)Удаление заданных файлов.

Синтаксис
del [диск:][путь] имя_файла [ ...] [/p] [/f] [/s] [/q] [/a[:атрибуты]]

думаю нужно бы - ... [/a[[:]атрибуты]] - так как у меня на практике работает и так: del /ah

------------------------
с dir "файлы со всеми атрибутами" понятно, а с del ? :
чтобы удалить файлы, скопом, вот с такими атрибутами

2) hid - AH
3) sys - AS
4) sys-hid - ASH
5) red - AR

нужно так - del /ahsr ??
Автор: Kirillhome
Дата сообщения: 17.01.2010 14:06
Black_Swan
А если просто создавать ярлык и в
C:\Documents and Settings\All Users\Главное меню\Программы
и в
C:\Documents and Settings\All Users\Main Menu\Programms

Во всяком случае обратное - я точно видел (когда английские программы устанавливали не в "Главное меню\Программы", а в "Main Menu\Programms")...

Автор: takt03
Дата сообщения: 17.01.2010 14:10
Ошибка чтение пароля :
D:\111>6.bat
ftp> open s24.turbobit.ru
Связь с s24.turbobit.ru.
220---------- Welcome to Pure-FTPd [privsep] ----------
220-You are user number 30 of 50 allowed.
220-Local time is now 15:09. Server port: 21.
220-This is a private system - No anonymous login
220 You will be disconnected after 15 minutes of inactivity.
Пользователь (s24.turbobit.runone)):
331 User *****~ OK. Password required
Ошибка чтения пароля

530 Login authentication failed
Сбой входа.
ftp>
Такая вот ошибочка.

ftp -s:"%dp0ftpscript.tmp" -i "/s " не правельно!
Автор: Kirillhome
Дата сообщения: 17.01.2010 14:13
mugil_cephalus
в DEL - то же, что и в DIR.
Т.е. все файлы - это del *.* /a:

del /ahsr - т.е. И hiden, И system И read-only одновременно!
Автор: mugil_cephalus
Дата сообщения: 17.01.2010 14:38
Kirillhome
у меня в ntcmds.chm для dir указано - Если параметр /a указан без атрибутов, команда dir выводит имена всех файлов, включая скрытые и системные. , а для del - такого нет.
это хорошо, что можно -
Цитата:
Т.е. все файлы - это del *.* /a:



Добавлено:
Black_Swan

%ALLUSERSPROFILE%\Start Menu\Programs
Автор: Black_Swan
Дата сообщения: 17.01.2010 14:56
Kirillhome


Цитата:
Black_Swan
А если просто создавать ярлык и в
C:\Documents and Settings\All Users\Главное меню\Программы
и в
C:\Documents and Settings\All Users\Main Menu\Programms

Во всяком случае обратное - я точно видел (когда английские программы устанавливали не в "Главное меню\Программы", а в "Main Menu\Programms")...

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

Добавлено:
mugil_cephalus

Цитата:
%ALLUSERSPROFILE%\Start Menu\Programs

Спасибо конечно, но вопрос в том что этот вариант не пройдет если винда русской локализации.
Автор: mugil_cephalus
Дата сообщения: 17.01.2010 15:01
chcp 1251
if not exist "%ALLUSERSPROFILE%\Главное меню\Программы\nul" (
chcp 866
md "%ALLUSERSPROFILE%\Start Menu\Programs\yourfolder"
)
Автор: GORA2
Дата сообщения: 17.01.2010 15:02
Black_Swan
Проверьте наличие каждой из папок
Цитата:
C:\Documents and Settings\All Users\Главное меню\Программы
и в
C:\Documents and Settings\All Users\Main Menu\Programms

И проанализируйте ответ. Какая папка будет существовать, в ту и добавляйте.
Автор: BorlandIMHO
Дата сообщения: 17.01.2010 15:07
takt03
Либо логин/пароль неправильно указан в скрипте, либо после него лишний пробел/табулятор. Открой ftpscript.tmp и проверь...
Скрипт прямо из браузера скопирован? Убивай пробелы в конце каждой строки...

Извиняюсь за предыдущую сырую "поделку" - for /r сработал не так, как ожидалось.
Исправленный вариант (работоспособность проверена загрузкой лабуды на ftp.narod.ru - квипа у меня нет и не будет)
Код: @echo off
set FTPSERVER=somthere.in.the.net
set FTPUSER=username
set FTPPASSWORD=password
set "QIPUSERFOLDER=c:\Program Files\QIP\Users\"
set "FTPFOLDER=/incoming/дальше идёт моя папка"

echo open %FTPSERVER%>%~dp0ftpscript.tmp
echo %FTPUSER% >>%~dp0ftpscript.tmp
echo %FTPPASSWORD%>>%~dp0ftpscript.tmp
echo cd "%FTPFOLDER%>>%~dp0ftpscript.tmp
echo literal pasv>>%~dp0ftpscript.tmp

for /F "delims=" %%A in ('dir /B /A:D "%QIPUSERFOLDER:~0,-1%"') do (
dir /B /S /A:D "%%~dpnxA"|find /I "history">%~dp0dlist.tmp
for /f %%B in (%~dp0dlist.tmp) do (
echo lcd "%%~dpnxB">>%~dp0ftpscript.tmp
echo mkdir "%FTPFOLDER%/%%~nxA">>%~dp0ftpscript.tmp
echo cd "%FTPFOLDER%/%%~nxA">>%~dp0ftpscript.tmp
for /F "delims=" %%C in ('dir /B /A:-D "%%~dpnxB"') do (
echo put "%%~nxC">>%~dp0ftpscript.tmp
)
)
del %~dp0dlist.tmp
)
echo by>>%~dp0ftpscript.tmp
ftp /s:%~dp0ftpscript.tmp
exit
Автор: Black_Swan
Дата сообщения: 17.01.2010 15:18
mugil_cephalus

Цитата:
chcp 1251
if not exist "%ALLUSERSPROFILE%\Главное меню\Программы\nul" (
chcp 866
md "%ALLUSERSPROFILE%\Start Menu\Programs\yourfolder"
)

Спасибо, то что доктор прописал!
Осталось только размножить и переделать еще и с учетом варианта под Висту/7.
Автор: mugil_cephalus
Дата сообщения: 17.01.2010 15:18
Black_Swan

Цитата:
Т.ч. мой вопрос открыт, как распознать язык винды,

X:\>ver

Microsoft Windows XP [Версия 5.1.2600]

в eng кириллицы не будет
Автор: Black_Swan
Дата сообщения: 17.01.2010 15:22
mugil_cephalus
Тема!
Путем сравнения по последним символам получим язык. СПС!

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

Предыдущая тема: во вкладке автозагрузка


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