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

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

Автор: Maza_Faka
Дата сообщения: 10.03.2009 07:46
Teboyev

Цитата:
Ковырял forfiles - не получается

Можно так:

Код:
@Echo Off

Set "FTPDIR=C:\FTPSend"

Forfiles /M *.txt /D +%DATE% /C "cmd /c copy "@path" "%FTPDIR%""
Автор: trigliff
Дата сообщения: 10.03.2009 09:00
Maza_Faka

Цитата:
Покажите пример.

Пример чего?

Короче приблизительно так, это абстрактный пример. Допустим имеется хеш с именами файлов. Вместо ключей надо поставить URL.

Вот так ясен пень не выходит
set URL=ftp://na_derevnu_dedu.ru/archive/
ssed -R s/bla_bla/%URL%/ my_file.txt

Под извращениями понималось экранирование слешей отдельным выражением.
Автор: Maza_Faka
Дата сообщения: 10.03.2009 09:16
trigliff
"Эскейпить" прямые слеши

Код:
set URL=ftp:\/\/na_derevnu_dedu.ru\/archive\/
Echo test_bla_bla_test | Sed "s/bla_bla/%URL%/"
Автор: trigliff
Дата сообщения: 10.03.2009 09:26

Цитата:
"Эскейпить" прямые слеши

Вот под этим я подразумевал извращение.
Дело в том, что реальный пример сложнее и эта переменная используется не только в регулярке.
Автор: Maza_Faka
Дата сообщения: 10.03.2009 10:48
trigliff

Цитата:
эта переменная используется не только в регулярке

Создать две переменные, с эскейпами и без

Код:
@Echo Off

set URL=ftp://na_derevnu_dedu.ru/archive/

Echo %URL% | Sed "s/\//\\\//g">tmp.sed
For /F %%A In (tmp.sed) Do Set sURL=%%A
Del /F /Q tmp.sed

Echo URL = %URL%
Echo.
Echo sURL = %sURL%

pause>Nul
Автор: trigliff
Дата сообщения: 10.03.2009 11:21
Maza_Faka

Цитата:
Создать две переменные, с эскейпами и без

Ну в общем-то я что-то подобное вчера и сделал.
Просто я sed практически не пользуюсь и не знаю его "особенностей", мне всегда представлялось, что он поддерживает каким-то образом экранирование в виде цитаты, а оказалось нет.
Автор: Maza_Faka
Дата сообщения: 10.03.2009 11:53
trigliff

Цитата:
я sed практически не пользуюсь и не знаю его "особенностей"

Я тоже знаю его не очень хорошо, возможно

Цитата:

он поддерживает каким-то образом экранирование в виде цитаты

Может сейчас "подойдёт" кто-нибудь, кто знает Sed лучше.
Автор: JohnRD
Дата сообщения: 10.03.2009 12:04
добрый день

подскажите пожалуйста как можно изменить короткое имя?


Код: dir /x
10.03.2009 11:19 <DIR> DRWEBE~2 DrWeb Enterprise Suite
10.02.2009 17:44 <DIR> DRWEBE~1 DrWeb Enterprise Suite OLD
Автор: Kilyan
Дата сообщения: 10.03.2009 12:36
Возможно ли отправить письмо(+возможное вложение) через Microsoft Exchange Server из ком. строки(может через какую утилитку)
Программа для работы с ним (Microsoft Outlook)...
Автор: wolf0425
Дата сообщения: 10.03.2009 13:03
Maza_Faka trigliff
прямые слеши можно и не экранировать, а заменить на другой символ
а обратные - удвоить через замену

Код: @Echo Off

set URL=ftp://na_derevnu_dedu.ru/archive/
set sedstr=s;/;\/;g

Echo %URL% | Sed "%sedstr:\=\\%">tmp.sed
For /F %%A In (tmp.sed) Do Set sURL=%%A
Del /F /Q tmp.sed

Echo URL = %URL%
Echo.
Echo sURL = %sURL%
Автор: lexx
Дата сообщения: 10.03.2009 13:22
Подскажите пожалуйста как автоматически менять route до внешнего сайта например pop.mail.ru, когда у него меняется ip адрес.
т.е. сейчас вручную на 10 клиентах прописано что-то типа
route -p add 94.100.177.6 192.168.100.13
Время от времени ip pop.mail.ru меняется на что-нибудь другое, и приходится прописывать маршруты вручную. С компов по ping pop.mail.ru можно получить ip адрес от ДНС сервера, как бы его занести в
route -p add %новый_ip_от_ping_pop.mail.ru% 192.168.100.13 чтобы применять при каждой загрузке компа?
Автор: igor_andreev
Дата сообщения: 10.03.2009 13:44
lexx

Код:
for /f "tokens=2 delims=[]" %a in ('ping -n 1 pop.mail.ru') do if not defined popserv set "popserv=%a"
Автор: 1nasty1
Дата сообщения: 10.03.2009 15:35
Может быть, кто-нибудь поделится красивой приветственной надписью для этих немудреных событий при старте терминальной сессии прописан автозапуск файла run_user.cmd следующего содержания:

@ECHO OFF
START program1.lnk
START program2.lnk

Запускается в терминальной сессии в небольшой фирме. Заранее СПАСИБО!
Автор: Teboyev
Дата сообщения: 10.03.2009 17:58

Цитата:
[/q]
[q]Teboyev

Цитата:Ковырял forfiles - не получается

Можно так:

Код:
@Echo Off

Set "FTPDIR=C:\FTPSend"

Forfiles /M *.txt /D +%DATE% /C "cmd /c copy "@path" "%FTPDIR%""


А кидать на FTP из папки %FTPDIR%.

Добавлено:
trigliff
Покажите пример.


Извините пожалуйста я не понимаю ничего в батниках. Если вам не трудно можете показать как полностью будет выглядить код? Ну как форфилес засунуть в батник который я показал. Спасибо большое!!!
Автор: Serhiy123
Дата сообщения: 10.03.2009 21:21
Я снова с вопросом насчет своего скрипта для защиты флешек от вирусов.

Для работы скрипту нужна иконка (файл .ico). Из-за этого (для удобства распространения) приходится компилировать bat-файл вместе с иконкой в exe с помощью Quick Batch File Compiler. Но в данном случае распространение в виде bat-файла было бы предпочтительнее (виден код).

Вопрос: можно ли с помощью команды echo создать прямо из bat-файла иконку примерно таким образом:


Код: echo какой-то_текст > icon.ico
Автор: maxi812
Дата сообщения: 11.03.2009 03:23
Teboyev


forfiles В WIN xP НЕ ПОДДЕРЖИВАЕТЬСЯ НАДО ФАЕЛЛ forfiles.exe скачать и скопировать в sys32
и все заработает
Автор: Altus
Дата сообщения: 11.03.2009 09:05
как получить полный вывод от xcopy?
поясняю: если выполнить xcopy xxx.xxx>log.txt - то мы в log.txt получим только "Скопировано файлов", а вот вторая строка (при отсутствии файла, ошибке доступа, etc...) выводится только в консоли. Как и её тоже получить? Или даже - только её.
Автор: king_stiven
Дата сообщения: 11.03.2009 09:25
Altus
Наверно никак. Попробуй copy, да ещё куча есть и xxcopy и robocopy.
Автор: Altus
Дата сообщения: 11.03.2009 09:57
robocopy как то старнно выставляет ерорлевел, по нему ориентироваться нельзя, xxcopy - даже не знаю что это, но всё равно в стандартной поставке венды его нет.
если просто copy - то код батника значительно больше будет, куча проверок архивного атрибута (/m), проверок наличия файла (/u)... хотелось бы конечно малой кровью обойтись. но похоже придётся жестить.
Автор: igor_andreev
Дата сообщения: 11.03.2009 10:40
Altus
robocopy XP010 нормально errorlevel отдает. В XP026 это известный косяк(но там есть ключи /DCOPY:T, /SECFIX, /XJD, /XJF и из-за них многие плюют на errorlevel).
Автор: Altus
Дата сообщения: 11.03.2009 11:01
igor_andreev
XP010-XP026 - это номера версий? не хочется ещё и от этого зависеть =)
вообще мне нужно скопировать некоторую группу файлов, и получить читаемый лог и только в случае ошибок. т.е. что именно не скопированно, куда и почему.

пока переписываю под "copy", но если кто то подскажет по сабжу - буду очень благодарен.
Автор: NvvLazyTiger
Дата сообщения: 11.03.2009 11:10
Altus
Цитата:
если выполнить xcopy xxx.xxx>log.txt - то мы в log.txt получим только "Скопировано файлов", а вот вторая строка (при отсутствии файла, ошибке доступа, etc...) выводится только в консоли. Как и её тоже получить? Или даже - только её.

Конструкция 2> перенаправляет StdErr в нужное место.
Конструкция xxx.xxx>log.txt 2>&1 - перенаправляет туда же, куда идёт StdOut (т.е. в log.txt).
Переменная ErrorLevel устанавливается равной коду завершения некоторых операторов.

Пример (a.cmd):
Код: xcopy MyFile .. >log 2>&1
echo Err=%ErrorLevel% >>log
Автор: ASGuard
Дата сообщения: 11.03.2009 12:35
Навоял батничек оределения свободного места на диске на ресурсе

Подскажите, как организовать удаление папок.?
При нехватке свободного места должен удалять папку самых ранних архивов
Но не более 3x папок за раз (защита на момент написания)

Потом буду думать чтобы ежедневные хранились пол года а месячные год.

Папки имеют формат типа \2008-09 и \2008-09\Manth
Внутри файлы plan_Day_2009.01.17.rar и plan_Manth_2009.02.02.part4.rar соответственно
раскидываются из общего каталога батничком приведённым ниже

затык на :SetDir и на :ClrDir

[more]

@Echo Off
SetLocal EnableDelayedExpansion
Set IDS="папок"
Set FDir="\\192.168.2.222\backup Проектов\plan_"
rem 1ГБ=1 077 921 832
Set LimSize=24258436643
Title AskDir

:AskDir
Dir %FDir% /A:D /O:D > dir.txt
ping -n 2 -w 1000 127.0.0.1 > nul
For /F "usebackq tokens=1-4 skip=5" %%i in (dir.txt) Do @(IF /i "%%j"==%IDS% (Call :AskSize "%%k" %%l))

If /I "%NDir%" LSS "3" (
If /I "%EraseRun%" GTR "0" (
Set /A NDir=%NDir%+1
Set /A CrD="0"
Call :SetDir
Goto :AskDir
)) ELSE (
Echo:
Echo: Попыток стирания каталогов %NDir%. Или всё стёрли или скоро всё сотрём.
ping -n 20 -w 1000 127.0.0.1 > nul
GoTo :EOF)
Echo:
Echo: Всё в "Ажуре"
Echo:
ping -n 10 -w 1000 127.0.0.1 > nul
GoTo :EOF

:AskSize
Set Size=%~1
For /F "usebackq tokens=1-5" %%i in ('%Size%') Do @(Set Size=%%i%%j%%k%%l%%m)
Echo:
Echo:Обьём свободного места %FDir%
If /I "%Size:~-15,-3%" GTR "0" (Set K=К
If /I "%Size:~-15,-6%" GTR "0" (Set M=М
If /I "%Size:~-15,-9%" GTR "0" (Set G=Г
If /I "%Size:~-15,-12%" GTR "0" (Set T=Т ))))
Echo: %Size:~-15,-12%%T%%Size:~-12,-9%%G%%Size:~-9,-6%%M%%Size:~-6,-3%%K%%Size:~-3%%2
Echo:
Call :Limits
GoTo :EOF

:Limits
If /I "%Size:~-15,-6%" LSS "%LimSize:~-15,-6%" (
Set /A RSize="%LimSize:~-15,-6%"-"%Size:~-15,-6%"
Set EraseRun=1
Echo:Обьём свободного места %FDir% меньше требуемого.
Set Ech=Нужно почистить.
) ELSE (
Set /A RSize="%Size:~-15,-6%"-"%LimSize:~-15,-6%"
Set EraseRun=0
Echo:Обьём свободного места %FDir% больше требуемого.
Set Ech=Резерв.
)
If /I "%RSize%" GTR "0" (Set M=М
If /I "%RSize:~-9,-3%" GTR "0" (Set G=Г
If /I "%RSize:~-9,-6%" GTR "0" (Set T=Т )))
Echo: %Ech% %RSize:~-9,-6%%T%%RSize:~-6,-3%%G%%RSize:~-3%%M%байт
GoTo :EOF

:SetDir
SetLocal EnableExtensions
Echo:
Echo: Уничтожаем каталог самого раннего времени создания
Set dirflag=/o:d /b /t:c /a:d
SetLocal
pushd %FDir%
For /F "tokens=*" %%i in ('dir %dirflag% %FDir%') Do @(Call :ClrDir "%%i")
GoTo :EOF

:ClrDir
If /I "!CrD!" == "0" (
Set /A CrD="1"

Del %1

Echo:
pause
)
GoTo :EOF

[/more]


[more]

@Echo Off
Set FDir=\\192.168.2.222\backup Проектов\plan_
Title SortArch
Call :File_Find
GoTo :EOF

:File_Find
Set f_Ext=rar
For %%a In (%FDir%\*.%f_Ext%) Do Call :File_Ex %%~nxa %%~ta
If Defined FileExist Echo Exist
Echo: All Move !!!
ping -n 5 -w 1000 127.0.0.1 > nul
GoTo :EOF

:File_Ex
Set FileExist=Yes
Set f_Count=1
Call :Rena %1 %2 %3
GoTo :EOF

:Rena
Set /a f_Count=%f_Count%+1
Set f_Name=%1
Set f_Date=%2
Set f_Day=%f_Date:~0,2%
Set f_Month=%f_Date:~3,2%
Set f_Year=%f_Date:~6,4%
Set f_NewDir=%f_Year%-%f_Month%

SetLocal EnableDelayedExpansion
Set sDS=Manth
Set iDS=5
Set bM=0
For /l %%a In (0,1,50) Do (
Set sDI=!f_Name:~%%a,%iDS%!
If !sDI!==%sDS% (Set bM=1)
)
If %bM%==0 ( MD %FDir%\%f_NewDir%
Move %FDir%\%f_Name% %FDir%\%f_NewDir%
) Else ( MD %FDir%\%f_NewDir%
MD %FDir%\%f_NewDir%\%sDS%
Move %FDir%\%f_Name% %FDir%\%f_NewDir%\%sDS%
)
GoTo :EOF

[/more]
Автор: Altus
Дата сообщения: 11.03.2009 13:21
NvvLazyTiger
То что нужно, ограмедное спасибо.

в итоге вот такая конструкция меня спасает: xcopy xxx.xxx 2>>log.txt
Автор: king_stiven
Дата сообщения: 11.03.2009 13:46
Altus
NvvLazyTiger
Иногда xcopy и такое выдаёт

Код: Скопировано файлов: 0.
Err=0
Автор: Altus
Дата сообщения: 11.03.2009 15:03
king_stiven
Ну в данном случае для меня это не принципиально

Код:
pushd %in%
xcopy xxx.xxx %out%%key%>nul
if %errorlevel% gtr 0 (xcopy xxx.xxx %out%%key% 2>>%log%&echo %in%xxx.xxx>>%log%&echo.>>%log%) else set /a nofile=nofile-1
Автор: Dexxy
Дата сообщения: 11.03.2009 16:20
Всем снова привет, я опять с вопросом...
Как можно (и можно ли вообще) через батник запустить файл через меню Open With?
Поясню:
У меня *.iso открываются в iso-редакторе, но также я часто их открываю в НероИмейджДрайв через Open With.
Нужен батник который открывал бы прописанный в нем файл через Open With в ИмейджДрайве не меняя основной программы (тоесть двойным кликом открывался бы iso-редактор).
Варианты открытия файла путём запуска ИмейджДрайва через комманду с добавлением пути к файлу не катят, т.к
хотелось бы использовать эту функцию не только на *.iso файлах и ИмейджДрайве.
Автор: VictorSG
Дата сообщения: 11.03.2009 17:55
Бодрого времени суток!

Задачка такая:
как по средством bat-файла проверить наличие принтера с определённым именем ... и если таковой имеется - завершить выполнение скрипта или перейти к определённой метке в скрипте, а если такового нет, то установить драйвер? Cитуация не в AD а Samba PDС. У меня всё устанавливается, драйвера заливаются, но вот непосредственно как опросить систему батником на наличие принтера с именем и сравнить допустим через if ..... недогоняю

Спасибо
Автор: FoxTer85
Дата сообщения: 11.03.2009 22:09
добрый день(вечер) , нужен совет:

как проиграть звуковой файл средствами Виндовс (без запуска сторонних утилит?)
нашел один способ:

RunDll32.exe msdxm.ocx,RunDll /play /close /hide C:\windows\media\tada.wav - но так появляется лишнее окно...

еще так(?):
rundll32 winmm.dll,sndPlaySoundA "с:\windows\media\tada.wav" - но этот вариант не пашет

подскажите, плиз
Автор: NvvLazyTiger
Дата сообщения: 12.03.2009 00:39
king_stiven
Цитата:
Иногда xcopy и такое выдаёт
Я не использую xCopy.Exe в своих разработках. За ненадобностью. ;)

В простых случаях - Copy, в сложных или ответственных - RoboCopy.Exe.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: как сохранить сетевые настройки


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