Ru-Board.club
← Вернуться в раздел «Программы»

» Командная строка, батники, сценарии (bat, cmd) 2

Автор: svs123456789
Дата сообщения: 21.04.2008 23:36
Elroir
спасибо!
а относительные пути в кавычках нельзя задавать ".\путь\" ?

не подскажите батник или скрипт для создания подключения по adsl
с предварительной проверкой что оно отсутсвует?
[more]
@Echo Off
rasdial "ZTE ZXDSL852" /disconnect
ping -n 1 127.0.0.1 >nul
Set CountDialUp=1
:Begin
Now Count: %CountDialUp%
Title [%CountDialUp%/80] "ZTE ZXDSL852"
RasDial "ZTE ZXDSL852" "ptn" "ptn"
If Not ErrorLevel 1 GoTo :EOF
Echo Код завершения:%ErrorLevel%
Set /a CountDialUp=CountDialUp+1
If "%CountDialUp%" == "99" GoTo :EOF
GoTo Begin
[/more]
Автор: Elroir
Дата сообщения: 21.04.2008 23:47
svs123456789

Цитата:
а относительные пути в кавычках нельзя задавать ".\путь\" ?

Можно.

Добавлено:

Цитата:
с предварительной проверкой что оно отсутсвует?


Код:
type "%SystemDrive%\Documents and Settings\All Users\Application Data\Microsoft\Network\Connections\Pbk\rasphone.pbk" 2>nul | find "[ZTE ZXDSL852]" >nul
if not errorlevel 1 (echo Connection exists) else (echo Connection doesn't exist)
Автор: gryu
Дата сообщения: 22.04.2008 11:08
mozers

Цитата:
Ответ - неверный. Переход произойдет только в случае отсутствия каталога.

Сори за не совсем понятнвый пример.
WIN51 - это не каталог, а маркерный ФАЙЛ из дистрибутива ХР.
И проверяется в данном случае наличие именно файла.
Можно написать
IF NOT EXIST .\Distrib\tralala.tla goto:se



Автор: Ortios
Дата сообщения: 22.04.2008 13:58
Чем перекодировать файлы из UTF-8 в CP-1251? Из командной строки.
Автор: igor_andreev
Дата сообщения: 22.04.2008 16:40
Ortios
utf8towin.vbs

Код:
If WScript.Arguments.Count = 2 Then
Set InputStream = CreateObject("ADODB.Stream")
InputStream.Type = 2
InputStream.CharSet = "utf-8"
InputStream.Open
InputStream.LoadFromFile(WScript.Arguments.Item(0))
InputFileContents = InputStream.Readtext
InputStream.Close
Set InputStream = Nothing
Set OutputStream = CreateObject("ADODB.Stream")
OutputStream.CharSet = "windows-1251"
OutputStream.Mode = 3
OutputStream.Open
OutputStream.WriteText InputFileContents
OutputStream.SaveToFile(WScript.Arguments.Item(1))
OutputStream.Close
Set OutputStream = Nothing
Else
Wscript.Echo "Usage: utf8towin.vbs source-file destination-file"
End If

Wscript.Quit
Автор: Ortios
Дата сообщения: 22.04.2008 18:59
igor_andreev,
Потрясающе, спасибо!!
Надо бы добавить в шапку!
Автор: 01MDM
Дата сообщения: 22.04.2008 19:46
Ortios

Еще советую утилиту iconv. Понимает более 100 кодировок. Вдруг надо будет перекодировать например koi8-r.


Код:
iconv -c -f utf-8 -t cp1251 utf.html > 1251.html
Автор: Ortios
Дата сообщения: 22.04.2008 21:24
01MDM,
За iconv также спасибо!
PS. И чего я только искал, как всегда ничего не нашел.
Автор: Fantom 14
Дата сообщения: 23.04.2008 08:59
народ а есть ли команда чтобы батник запускался в минимизированном состоянии?
Автор: Doc_Evil
Дата сообщения: 23.04.2008 18:21
У меня есть одна задумка, но чтобы её осуществить нужно переименовать многотомные архивы примерно так: test.part01.rar, test.part02.rar... на test01.db, test02.db... Максимум, что я добился при помощи команды ren, это сменить расширение или test (в начале). Т.к. у файлов вроде бы как двойное расширение, переименовать part** никак мне не удаётся Подскажите, есть ли решение для моей проблемы?
Автор: igor_andreev
Дата сообщения: 23.04.2008 18:31
Doc_Evil

Код:
bkren "(.*)\.part(.*)" "\1\2"
Автор: Doc_Evil
Дата сообщения: 23.04.2008 18:46
igor_andreev
Спасибо, всё работает!
Автор: igor_andreev
Дата сообщения: 23.04.2008 18:46
Или даже правильнее так

Код:
bkren "(.*)\.part([0-9]*)\.rar" "\1\2.db"
Автор: Doc_Evil
Дата сообщения: 23.04.2008 19:00
Забыл спросить, а как "отмотать" всё назад?
Спасибо.
Автор: vmix
Дата сообщения: 23.04.2008 19:40
Возвращаюсь к теме удаления старых файлов.

Рекомендуемый везде forfiles работает только с датой модификации файла, а при копировании файла изменяются только время доступа и создания, следовательно, к папкам обмена forfiles не применишь. Может быть есть у кого скрипт (батник) или утилита для удаления файлов/папок с датой (мод/созд/дост) старше указанной?

Спасибо.
Автор: nesty
Дата сообщения: 23.04.2008 22:27
Всем доброго времени суток...залпом прочитала 20 страниц этой темы-оч интересно...
стала писать...вот только тут не понятно...не мог бы кто-нибудь пояснить этот кусочек когда-то приведенного тут кода...прям по частям по буковкам если можно...

rem удаление из папки всех файлов кроме файлов на текущую дату
for /f "tokens=*" %%i in ('dir /b /s /a c:\1') do (echo %%~ti | findstr /v %date% 1>nul && del /q "%%i")
pause

Всем заранее огромное спасибо...
Автор: igor_andreev
Дата сообщения: 24.04.2008 11:14
Doc_Evil

Цитата:
Забыл спросить, а как "отмотать" всё назад?

Обратно переименовать

Код:
bkren "([a-z]*)([0-9]*)\.db" "\1.part\2.rar"
Автор: 01MDM
Дата сообщения: 24.04.2008 17:40
vmix


Цитата:
Может быть есть у кого скрипт (батник) или утилита для удаления файлов/папок с датой (мод/созд/дост) старше указанной?


Попробуй DelOld, gui и command-line интерфейс.

Много примеров для работы с датой в 4 части задач на батфайлах
Автор: Elroir
Дата сообщения: 24.04.2008 22:07
nesty


Цитата:
не мог бы кто-нибудь пояснить этот кусочек когда-то приведенного тут кода...прям по частям по буковкам если можно...

rem удаление из папки всех файлов кроме файлов на текущую дату
for /f "tokens=*" %%i in ('dir /b /s /a c:\1') do (echo %%~ti | findstr /v %date% 1>nul && del /q "%%i")


Для начала - посмотри справку по командам for, dir, findstr и del.
Очень сложно связно объяснить, что делает каждый символ в этой строке.
Я сейчас 20 минут пытался сформулировать внятное объяснение - ничего так и не получилось.
Автор: Tipulatoid
Дата сообщения: 25.04.2008 06:57

Цитата:
не мог бы кто-нибудь пояснить этот кусочек когда-то приведенного тут кода...прям по частям по буковкам если можно...

Действительно, связно объяснить сложно. Надеюсь, объясню кое-что:

for /f "tokens=*" %%i in ('dir /b /s /a c:\1') do (echo %%~ti | findstr /v %date% 1>nul && del /q "%%i")

For (цикл) - конструкция, позволяющая выполнять команды (они идут после DO) для каждого из элементов выбранного множества

Какое именно множество будет обрабатываться циклом - указываем в первых скобках после IN В нашем случае множество это - вывод команды dir /b /s /a c:\1 Набери ее в консоли без кавычек и посмотри результат. Разберем ее:

dir - выводит список файлов и папок
c:\1 - целевая папка, чье содержимое надо отобразить
/b - ключ, указывающий выводить только имена файлов и папок, без прочей информации
/s - показать содержимое не только целевой папки, но и ее подпапок
/a:-d - из всего содержимого выводить все НЕпапки, т.е. файлы

Поиграй с командой dir , добавляя/удаляя ключи и посмотри результаты

итак, в целом dir /b /s /a c:\1 выводит только имена файлов в целевой папке и ее подпапках. Эти имена мы и обрабатываем командами, идущими после DO

Дальше разберем for
"delims=?" (в данном примере нет за ненадобностью) нужно для того, что разбить обрабатываемый элемент множества на части. Например, пусть разбираемый элемент у нас - фраза "в пруду рыба" Если у нас стоит "delims=р" мы разобьем ее на 3 части: "в п" ; "уду " ; "ыба" и можем по отдельности подставлять их в команды после DO
Если бы было в нашем рассматриваемом примере "delims=.", например, то мы бы разбили каждый элемент множества (т.е. имена файлов) на части - собственно имя и расширение и могли бы работать с ними по отдельности.
Если "delims=" не указан прямо (как в нашем случае), то разделителем считается знак пробела
"tokens=?" нужно для того, чтобы указать какие части элемента множества нам нужно взять для обработки в командах после DO. В примере с фразой "в пруду рыба" "delims=p tokens=1,3" означает, что мы выбираем для обработки 2 части элемента множества - "в п" и "ыба" ; "delims=p tokens=1-3" - означает, что берем части с 1-ой по 3-ью.
в нашем случае "tokens=*" без всякого delims - говорит что для обработки мы будем брать элемент множества целиком, не разбивая его на части.

%%i - это как мы будем обозначать первую часть каждого элемента множества для подстановки его в командах, идущих после DO В нашем случае мы берем весь элемент множества (имя файла) целиком, и потому 2-ой, 3-ей и т.д. части нет. Если бы они были, мы бы обозначали в командах после DO 2-ую часть - %%j 3-ью -%%k и т.д., т.е. по алфавиту.

Далее, команды, идущие после DO, т.е. собственно, что нужно сделать с каждым элементом множества

echo %%~ti | findstr /v %date% 1>nul && del /q "%%i"

echo %%~ti
%%~t? - этот модификатор сообщает дату последней модификации файла. Поскольку в %%i у нас забито имя обрабатываемого файла, то модификатор выведет дату последнего его изменения.

| - приказывает передать вывод предыдущей команды (т.е. дату модификации файла) для обработки следующей.

findstr /v %date% 1>nul
%date% - системная переменная, в которой содержится текущая дата. Набери echo %date% в консоли.
findstr - поиск строки-образца (в нашем случае текущей даты) в выводе предущей команды.
findstr /v - вывод всех строк, что НЕ совпадают с образцом
1>nul не выводить на экран сообщения об ошибке в случае, если выводить нечего.

В целом вся команда - отфильтровать вывод от echo %%~ti , пропустить далее только то, что не содержит текущую дату, сообщения об ошибках не выводить.

&& - в случае успеха предыдущей команды (т.е. если через фильтр findstr прошло что-либо)

del /q "%%i" - удалить файл без запроса подтверждения.
Автор: Kilich
Дата сообщения: 25.04.2008 08:07
Tipulatoid

Спасибо за подробное описание
Автор: Tipulatoid
Дата сообщения: 25.04.2008 09:36
Kilich
Пожалуйста. Чет я затупил при описании ключевых слов цикла. Поправил.
Автор: JI063uk
Дата сообщения: 25.04.2008 16:19
Подскажите как при помоще бат файла запустить службу на компах которые прописаны в текстовом файле "Служба сообщений C:\WINDOWS\system32\svchost.exe -k netsvcs"
Пробывал через start не получяеться может есть другие варианты

Автор: 01MDM
Дата сообщения: 25.04.2008 18:04
JI063uk

sc \\CompName start Messenger
sc /?
Автор: Elroir
Дата сообщения: 25.04.2008 19:51
Tipulatoid

Цитата:
1>nul не выводить на экран сообщения об ошибке в случае, если выводить нечего.

Чуть-чуть поправлю:
1>nul - не выводить на экран вывод предыдущей команды, а не ошибки.
Автор: gryu
Дата сообщения: 25.04.2008 21:04
Коллеги, помогите решить проблемку.
Идея.
По телефонному звонку "блондинка" делает 2 клика на иконке батника и тот.
1. Запускает программу проверки на необходимость обновления (сделано)
2. Пакует результат проверки в архив (сделано)
3. Выкладывает по FTP полученный файл на FTP сервер. (от тут то я и завяз)
Итак, как батником отправить по FTP файл на FTP сервер с логином и паролём на доступ (НЕ анонимус) и не стандартным портом (не 21)

Добавлено:
!!. Средствами виндовс. Т.е. вариант с установкой FTP клиента рассматривается, но не желателен.
Автор: mozers
Дата сообщения: 26.04.2008 10:07
gryu
curl -v -# -T filename.ext ftp://login:password@199.188.277.18:9621/dir/subdir/
или
ftp (но я так и не смог ее заставить работать в пассивном режиме. Только - актив).
Автор: Fantom 14
Дата сообщения: 26.04.2008 20:07
а может всетаки ктонить ответит на мой вопрос?
Автор: 01MDM
Дата сообщения: 26.04.2008 22:09
Fantom 14

start /min test.cmd

Если это тот вопрос
Автор: sk754800
Дата сообщения: 27.04.2008 14:28
Tipulatoid Командная строка, батники, сценарии (bat, cmd) 2


Цитата:
Цитата:не мог бы кто-нибудь пояснить этот кусочек когда-то приведенного тут кода...прям по частям по буковкам если можно...

Действительно, связно объяснить сложно. Надеюсь, объясню кое-что:

for /f "tokens=*" %%i in ('dir /b /s /a c:\1') do (echo %%~ti | findstr /v %date% 1>nul && del /q "%%i")
[...]

Спасибо за детальное объяснение!

Подскажите плс: как модифицировать предложенную команду, чтобы удалялись не "не-сегодняшние" файлы, а файлы датой на n дней старше, чем сегодня?

Утилитку DelOld посмотрел. Но приведенное решение imho красивее и переносимо без дополнения Path и переноса утилиты delold...

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: DVD-video (ДВД-видео) - что и как (часть 3)


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