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

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

Автор: Tipulatoid
Дата сообщения: 11.04.2007 17:52
sansun

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


Вот чуток адаптированный код, который я в свое время писал для своих нужд. Проверено на ftp.narod.ru - у меня работает. Хотя сильно сомневаюсь, что у вас с первого раза заработает - все очень индивидуально и зависит от настроек системной даты и от еще разных вещей. Главное - понять суть. Я не утверждаю, что код этот умен, думаю, многие гораздо лучше напишут. Если не заработает - пиши - помогу, только как можно больше инфы нужно будет. Да, и еще, данный батник сохраняет пароль в незашифрованном виде в файле ftp.ini там его любой может подглядеть.


Код: @echo off
setlocal enabledelayedexpansion
for /f "delims=. tokens=1-3" %%a in ('echo %date%') do (
set day=%%a
set month=%%b
set year=%%c)

if /i %month%==01 set nmonth=Jan
if /i %month%==02 set nmonth=Feb
if /i %month%==03 set nmonth=Mar
if /i %month%==04 set nmonth=Apr
if /i %month%==05 set nmonth=May
if /i %month%==06 set nmonth=Jun
if /i %month%==07 set nmonth=Jul
if /i %month%==08 set nmonth=Aug
if /i %month%==09 set nmonth=Sep
if /i %month%==10 set nmonth=Oct
if /i %month%==11 set nmonth=Nov
if /i %month%==12 set nmonth=Dec

if exist ftp.ini goto download

::Ввод установочных данных
echo Введите адрес ftp-сервера. Например: ftp.narod.ru
set /p ftp_adress=
echo Введите ваш логин на ftp-сервере Например: delta-greit
set /p ftp_login=
echo Введите пароль для вашего логина.
set /p ftp_password=

:: Запись введеных данных в ftp.ini
echo Создаю ftp.ini . . .
echo [Ftp adress]> ftp.ini
echo 0+%ftp_adress%>> ftp.ini
echo [Ftp login]>> ftp.ini
echo 0#%ftp_login%>> ftp.ini
echo [Ftp password]>> ftp.ini
echo 0~%ftp_password%>> ftp.ini

ownload
::Чтение значений переменных из ftp.ini
for /f "eol=[ tokens=2 delims=~" %%a in (ftp.ini) do set ftp_password=%%a
for /f "eol=[ tokens=2 delims=#" %%a in (ftp.ini) do set ftp_login=%%a
for /f "eol=[ tokens=2 delims=+" %%a in (ftp.ini) do set ftp_adress=%%a

::Создание сценария входа и действий на ftp-сервере (создаем список имеющихся файлов)
echo %ftp_login%> check.del
echo %ftp_password%>> check.del
echo cd work>> check.del
echo dir>>check.del
echo quit>>check.del

::Заходим на ftp по сценарию check.del и получаем список всех файлов в логе (log.del)
ftp -i -v -s:check.del %ftp_adress% > log.del
del /q check.del 2>nul

::Создание сценария входа и действий на ftp-сервере (скачиваем файлы с сегодняшней датой)
echo %ftp_login%> download.del
echo %ftp_password%>> download.del
echo cd work>> download.del

::Из лога выцепляем те строки, в которых содержится сегодняшняя дата и пишем имена
::файлов из этих строк в сценарий вместе с командой get
for /f "tokens=9" %%a in ('find /i "%nmonth% %day%" log.del') do (
set file=%%a
echo get !file:~0,-1!>>download.del
)

echo quit>>download.del

del /q log.del 2>nul

::Заходим на ftp по сценарию download.del и скачиваем сегодняшние файлы
ftp -i -v -s:download.del %ftp_adress%
del /q download.del 2>nul
Автор: euheny
Дата сообщения: 11.04.2007 23:35

Код: @Echo off
Reg add HKCR\Directory\shell\cmdhere /t REG_SZ /v "" /d CMD /f
Reg add HKCR\Directory\shell\cmdhere\command /t REG_SZ /v "" /d "C:\Windows\System32\cmd.exe /k cd "%1"" /f
Автор: igor_andreev
Дата сообщения: 12.04.2007 00:15
euheny

Цитата:
Что это за параметр %L

То же самое, что %1, только будет передано длинное имя файла. Работает только в реестре, в самом проводнике или комстроке не используется.

Цитата:
Ну так неудобно же

Вообще никогда не задумывался над этим. cmd.exe запускается в проводнике по хоткею в той папке, где нахожусь. Если в Fare "сидю" - там своя комстрока есть. Батники, что-то делающие регулярно, таких большинство, запускает планировщик. Несколько папок, в которых мои батники живут, тоже открываются быстро по хоткею и никакого труда не составляет щелкнуть мышой по нужному.

Цитата:
А так выделил файл и из контекстного меню запустил батник для него - Удобно!

А вот если задач много , то и поинтересовался как бы вложения в контекстном меню организовать.

У тебя в проводнике есть папка SendTo, создаешь в ней папку Batch и полный вперед, создавай в ней другие подпапки(будут раскрываться как подменю), ярлыки на любые батники в любых количествах.

Автор: Elroir
Дата сообщения: 12.04.2007 00:56
igor_andreev

Цитата:
cmd.exe запускается в проводнике по хоткею в той папке, где нахожусь

Если не секрет ()- каков механизм?
Автор: igor_andreev
Дата сообщения: 12.04.2007 01:09
Elroir
Да почти такой-же, как в твоем батнике для перезапуска открытых окон проводника. nnCron по хоткею читает заголовок активного окна проводника(у меня там завсегда полный путь прописан) и запускает cmd.exe в этой папке.
Автор: euheny
Дата сообщения: 12.04.2007 03:24
igor_andreev

О !... , удовлетворён твоим ответом на 100%.Папка SendTo ... и как я до сих пор не сообразил для батников приспособить - ведь постоянно её колупаю ...
Цитата:
читает заголовок активного окна проводника
А вот здесь мне тоже надо.Давно ищу способ.Нужно закрыть из батника окно проводника для конкретной папки(т.е. видимо тоже нужно читать заголовок)
Ну и как обычно желательно без сторонних утилит.

Автор: Nagual
Дата сообщения: 12.04.2007 04:15
Elroir
igor_andreev
euheny


ну не знаю зачем крона здесь, когда это поддерживается самой системой
а вообще reg-файлик для вкючения этой функции выглядит так

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\Коммандная строка...\Command]
@="cmd.exe /k cd \"%1\""

ну и ессно можно ставить приглашение комстроки на свое усмотрение
Автор: VladimirKvach
Дата сообщения: 12.04.2007 04:30
Друзья, подкажите какой-нибудь виндовый бесплатный ftp uploader, который бы все параметры брал из командной строки и работал в виде GUI-евого бегунка.

PS Сейчас для этой цели пользую curl, но неокрепшая пользовательская психика требует привычных интерфейсов

Спасибо.
Автор: Elroir
Дата сообщения: 12.04.2007 09:27
Nagual

Цитата:
ну не знаю зачем крона здесь

Именно для того, чтобы можно было использовать вызов по hotkey.
А при добавлении контекстного меню в папку - надо еще мышкой куда-то лезть
Автор: testir
Дата сообщения: 12.04.2007 09:56
Подскажите плиз, как сделать чтоб при обходе по for /R d:\temp\ %%i in (.) do
выделялась текущяя директория, а не весь путь, и присваивалась какой-нибудь переменной ??
Автор: Elroir
Дата сообщения: 12.04.2007 10:20
testir
То есть, тебе нужно - если for в данный момент проходит через d:\temp\abc\def, взять директорию def и присвоить это имя переменной?
Тогда так:

Код:
setlocal enabledelayedexpansion
for /R d:\temp\ %%i in (.) do (
set "cur_dir=%%~nxi"
echo !cur_dir!
...
...
)
Автор: testir
Дата сообщения: 12.04.2007 11:21
Elroir
Спасиб ) так просто оказывается )
а где можно глянуть поподробнее по значениям применяемым в этой строке
Цитата:
set "cur_dir=%%~nxi"

что означают "%%~nxi" и как их можно комбинировать )
Автор: Elroir
Дата сообщения: 12.04.2007 11:30
testir
Здесь - описание от Microsoft.
Или просто набрать в командной строке "for /?"
Автор: igor_andreev
Дата сообщения: 12.04.2007 11:37
VladimirKvach

Цитата:
подкажите какой-нибудь виндовый бесплатный ftp uploader, который бы все параметры брал из командной строки и работал в виде GUI-евого бегунка.

По описанию - прям вылитый Catfood FTP. Только он не бесплатен, но на многих сайтах сейчас рекламная акция - 100-процентные скидки на покупку. Типа lomalka.ru.
В нем есть консольная утилита, которой в комстроке отдаешь скрипт-задание(в блокноте можно написать) и она аплоадит все или только обновленные файлы, как тебе надо, аки curl. И есть небольшое gui-приложение, которое тот же самый скрипт может редактировать из gui и при запуске из комстроки будет прогресс-бар показывать.
http://www.catfood.net/products/cftp/
Автор: euheny
Дата сообщения: 12.04.2007 11:42
Ну короче надо мне ещё одну вещь попытаться выяснить.
Конечно это возможно не совсем сюда , но куда ещё ?

Вобщем входной параметр - буква логическоко диска
Нужно определить к какому физическому диску она относится(его номер) , а также параметры физического диска C\H\S

Короче если кто чего знает из этой степи то поделитесь инфой
Автор: slayer120
Дата сообщения: 12.04.2007 16:59
ALL подскажите
юзаю программу accesschk (из wininternal), она позволяет смотреть
права юзеров. Хочу найти все каталоги, куда user2 имеет доступ на запись.
В батнике ввожу строчку:
accesschk.exe domain\user2 -s -d -w \\server\catalog > access_user2.txt

А он редиска вместо русских букв имен каталогов выводит ?.
Версия 3.0 самая свежая. Добавление chcp 1251 ничего не изменило.
Я так понял прога с уникодом не работает (. Кто подскажет что делать?

Автор: NIKZZZZ
Дата сообщения: 12.04.2007 17:55

Цитата:
Нужно определить к какому физическому диску она относится(его номер) , а также параметры физического диска C\H\S

Я не понимаю , зачем это может пригодиться , в режиме LBA на это можно наплевать. Посмотри diskpart, возможно что-нибудь найдешь.


Добавлено:
slayer120

Цитата:
А он редиска вместо русских букв имен каталогов выводит ?.

А что он выводит? Может просто конвертировать access_user2.txt какой нибудь прогой, типа dos2win или чем-нибудь подобным?
Автор: testir
Дата сообщения: 12.04.2007 18:18
Подскажи плз, как ссоставить условие типа:
Если текущая директория не "Folder1" и имя текущей директории соответствует
%переменная1%, то удалить текущюю директорию ??
Автор: Elroir
Дата сообщения: 12.04.2007 18:46
testir

Код:
@echo off
call :check "%cd%"
goto :EOF
:check
if not "Folder1"=="%~nx1" (
if "%~nx1"=="%переменная1%" (
cd..
rd /s /q "%~nx1"
)
)
Автор: NIKZZZZ
Дата сообщения: 12.04.2007 23:56
Nagual

Цитата:
А если без хитрых выпадов?
это уже другая ветка

А почему другая?


Автор: euheny
Дата сообщения: 13.04.2007 02:32
NIKZZZZ

Цитата:
Я не понимаю , зачем это может пригодиться , в режиме LBA на это можно наплевать. Посмотри diskpart, возможно что-нибудь найдешь.


Хочу сделать скрипт делающий флэшку загрузочной.Для этого C\H\S нужно знать иначе не будет грузится. Через diskpart можно узнать только номер диска , но батник наверное замысловатый получится.А вот с C\H\S прблема.
Автор: Maza Faka
Дата сообщения: 13.04.2007 07:25
testir

Цитата:
Если текущая директория не "Folder1" и имя текущей директории соответствует
%переменная1%, то удалить текущюю директорию ?


Немного странная задачка, можно так:

Код:
Set myVar=Folder
Set myFolder=%CD%
For %%i in (%CD%) do (
If /i not "%%~ni"=="Folder1" (
If /i "%%~ni"==%myVar% (
cd..
RD /s /q %myFolder%
)
)
)
Автор: NIKZZZZ
Дата сообщения: 13.04.2007 07:45
euheny

Цитата:
Хочу сделать скрипт делающий флэшку загрузочной.Для этого C\H\S нужно знать иначе не будет грузится.

Чтобы сделать флэшку загрузогной совершенно не надо знать C\H\S, достаточно просто ее отформатировать - (format /fs:ntfs k:).

Автор: slayer120
Дата сообщения: 13.04.2007 08:38
NIKZZZZ

Цитата:
А что он выводит?

Примерно следующее:

\\server\contr\dos\?????????\??????3\k1
\\server\contr\driver\?????????\??????3\k2
\\server\contr\senator\flash\?????????????\???????????????
Пытался вывод направлять в проги конвертилки - то же самое.
А задачка нужная - найти папки, доступнуе юзеру,
разбросанные по папкам диска.
Может будут какие-то мысли.
Автор: testir
Дата сообщения: 13.04.2007 08:39
Elroir
Maza Faka
что то не получается, может я не правильно сформировал условие, задача заключаеся в следующем, есть список каталогов,названные по именам серверов,в них каждый день создаются папки - имя папки дата предыдущего дня, нужно рекурсивно обходить все папки кроме одной и удалять каталоги совпадающие с заданной датой.
Уважаемый Elroir уже подсказал вчера начало кода


Цитата:
setlocal enabledelayedexpansion
for /R d:\temp\ %%i in (.) do (
set "cur_dir=%%~nxi"
echo !cur_dir!
...
...
)



if /I !cur_dir! == %set_data% (rmdir %%i /q /s | echo %%i >n.txt)
это соответствие с заданной датой,
осталось только ввести условие на исключение той единственной папки, которую не нужно трогать, типа пропускать )
Автор: Elroir
Дата сообщения: 13.04.2007 10:19
testir

Цитата:
что то не получается, может я не правильно сформировал условие

Вот именно неправильно - при обходе for-ом, текущая директория не меняется.
Видимо будет работать так:

Код:
setlocal enabledelayedexpansion
for /R d:\temp\ %%i in (.) do (
if not "Folder1"=="%%~nxi" (
if "%%~nxi"=="%переменная1%" (
rd /s /q "%%i"
)
)
)
Автор: NIKZZZZ
Дата сообщения: 13.04.2007 11:50
slayer120

Цитата:
А что он выводит?

Нужно попробовать открыть этот лог в каком-нибудь редакторе, поддерживающим разные кодировки. Например этим. Судя по всему, это нормальный файл, который достаточно просто перекодировать. Если не получится - выложи куда-нибудь полный лог.


Автор: igor_andreev
Дата сообщения: 13.04.2007 12:26
NIKZZZZ

Цитата:
Чтобы сделать флэшку загрузогной совершенно не надо знать C\H\S, достаточно просто ее отформатировать - (format /fs:ntfs k.

А чего вдруг флэшка станет загрузочной от простого форматирования? Есть дивные утилиты от Hewlett-Packard для форматирования флешек, попутно и загрузочными их могут сделать. Гуевая+консольная SP27213.exe (1,97 Mb) и консольная отдельно sp27214.zip (502 Kb)
Автор: testir
Дата сообщения: 13.04.2007 12:36
Elroir
удаляет все папки соответствующие %переменная1% ((
получается что вот это

Цитата:
if not "Folder1"=="%%~nxi" (

условие не отрабатывается при соответствии папок, почему ??
Автор: NIKZZZZ
Дата сообщения: 13.04.2007 13:02
igor_andreev

Цитата:
А чего вдруг флэшка станет загрузочной от простого форматирования?

Ну, мне например, нравится утилита ufdprep.exe из пакета UFD Preparation Tool for Windows XP Embedded.
А с чего ей не стать загрузочной? Format.com делает нормальный загрузочный сектор и в FAT и в NTFS, Bios прекрасно определяет такую флэшку как UsbFlashDisk. Я не встречал проблем - все прекрасно грузится. Исключение - древние флэшки, они не всегда правильно распознаются биосом. А вот предложенная тобой утилита не делает загрузочные флэшки NTFS формата, хотя возможно я ошибаюсь.(с первого раза не получилось, потом не пробовал.)

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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