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

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

Автор: Roofo
Дата сообщения: 03.03.2008 16:56
Подскажите как из bat-файла определить сколько места занято на логическом диске.
Сам пока решил задачу так

dir | find "байт свободно" > dir.txt
For /F "tokens=3" %%I In (dir.txt) Do set FREE=%%I
set FREE=%FREE:я=%
set FREE=%FREE:~0,-3%

но может есть более изящное решение?
Автор: 01MDM
Дата сообщения: 03.03.2008 20:24
Roofo
Можно так узнать

Код:
@echo off
for /f "tokens=3*" %%i in ('dir C:\') do set line=%%i %%j
:next
set /a tok+=1
for /f "tokens=%tok%" %%i in ("%line%") do (
    echo %%i | findstr [0-9] 1>nul && set size=%size%%%i
if not "%%i"=="" goto:next
)
echo %size%
Автор: king_stiven
Дата сообщения: 04.03.2008 03:43
Roofo
А что тебя не устраивает?

Код: @echo off
chcp 1251 > nul
For /F "tokens=3" %%I In ('dir ^| find "байт свободно"') Do set FREE=%%I
set FREE=%FREE: =%
set FREE=%FREE:~0,-3%
Автор: PegasusUnicorn
Дата сообщения: 04.03.2008 07:25
Что-то у меня часто не срабатывает эта штука:
set datetimetemp=%date%_%time:~0,-3%
set datetimetemp=%datetimetemp::=-%
md E:\COPY.BASES\%datetimetemp::=-%
CD E:\BASES

Автор: 01MDM
Дата сообщения: 04.03.2008 08:03

Цитата:
Что-то у меня часто не срабатывает эта штука

Что значит "часто"?

И поясни, что ты делаешь:

Цитата:

md E:\COPY.BASES\%datetimetemp::=-%
CD E:\BASES


Автор: Roofo
Дата сообщения: 04.03.2008 09:12
king_stiven

Цитата:
А что тебя не устраивает?

дело в том, что "байт свободно" работает только на русской версии Windows, а хотелось бы большей универсальности.
И мне нужно знать сколько ЗАНЯТО места на разделе. Забыл сказать, что определял свободное место только потому, что заранее знал размер раздела и сколько занято определял вычитанием.

01MDM
Спасибо. Разберусь, попробую...
Автор: Nagual
Дата сообщения: 04.03.2008 10:58
Max441
насколько я понял тебе нужно что-то вроде
Код: @echo off
chcp 1251>nul
:next
set /p "c=Введите имя компьютера: "
set /p "l=Введите имя профиля: "
set q="\\%c%\C$\Documents and Settings\%l%\Local Settings\Application Data\test\"
if exist %q%bookmark_old.nsf (del/q %q%Cache.ND&move/y %q%bookmark.nsf bookmark_old.nsf)
goto:next
Автор: Maza Faka
Дата сообщения: 04.03.2008 11:06
Roofo
Оптимальный вариант сделать это средствами VB-скрипта. Скопируй нижеуказанный код в файл и обзови, например GetDriveBusy.vbs

Код: Set FSO = CreateObject("Scripting.FileSystemObject")
Set DriveC = FSO.GetDrive("C:")
Total = DriveC.TotalSize
Free = DriveC.FreeSpace
Busy = Round((Total - Free) / 1024 / 1024 / 1024, 2)
MsgBox "Локальный диск C:\" & vbCrLf & _
"Занято: " & Busy & "GB"
Автор: Takuja
Дата сообщения: 04.03.2008 11:35
Парни привет еще разок.
Помогите создать "мониторинг" трасировки задержек по милисекндам.

По сюжету можно было бы использовать команду Ринг и Трасер, трасером определять все айпи адреса и пинговать их вписывая всё в документ, но я уверен что кто то может предложить решение по лучьше.
Суть такая, что нуужет Батник, каторый выводил бы мне журнал в виде

время хост1 хост2 хост3 хост4 хост5

10:10:01 10мс 50мс 30мс * *
10:10:02 10мс 50мс 30мс 15мс 6мс


как это организовать средствами СМД, давайте подумаем, это задача не из простых, но очень актуальных для работы с сетями, для проверки и иногда для дрюкания провайдера на бабулевичи.
Автор: Joolz
Дата сообщения: 04.03.2008 13:34
01MDM

Цитата:
wmic logicaldisk where name="C:" get freespace /value


Хм, только хотел узнать как решить задачку, а тут уже есть и вопрос и ответ.

На базе приведенного состряпал батник, который выводит только объемы для всех дисков, но для красоты вывода хотелось бы все перевести в мегабайты, а тут засада - не знаю как переменную перевести в другую категорию, т.к. при попытке присвоить переменной значение %%а оно ругается на превышение 32 бит. Как побороть?


Код:
for /f %%a in ('wmic logicaldisk get freespace') do (
if NOT %%a==" " echo %%a | FINDSTR [0-9]
)
Автор: Nagual
Дата сообщения: 04.03.2008 15:42
Takuja
попробуй так

log_servers.cmd
Код: @echo off
title ‘®§¤ -ЁҐ ®взсв  Їа®ўҐаЄЁ бҐаўҐа®ў...
set serv_list=google.com ya.ru rambler.ru
for %%a in (%serv_list%) do (
echo
===============================================================================>>log.txt
call:time
echo
Џа®ўҐаЄ  %%a>>log.txt
ping %%a>>log.txt
echo.>>log.txt)
goto:eof
:time
echo %date% %time:~0,-3%>>log.txt
Автор: 01MDM
Дата сообщения: 04.03.2008 15:57
Joolz

Если число в переменной получается слишком большим, то наверное надо рассчитывать по разрядам или воспользоваться каким-нибудь калькулятором, я использую clcc.exe
Автор: 81sanek81
Дата сообщения: 04.03.2008 17:48
Здраствуйте! У меня простой вопрос: реально ли создать такой bat-файл, который запустит из сети по адресу типа "//блаблабла/бла-бла/" что-нибудь, или который сам сработает будучи запущеным из сети? У меня не получается, в чёрном окошке пишется "Указанный путь был использован при запуске CMD.exe в качестве текущей папки. CMD.exe не поддерживает пути UNC. По умолчанию выбрана системная папка Windows".
Дело в том, что мне нужно чтобы на всех компьютерах в сети запускался этот bat-файл (который в свою очередь запускает reg-файл с ключом /s), поэтому я в групповой политике прописываю этот батник при автозагрузке всем пользователям - а он не срабатывает.
Как можно решить проблему, поделитсь пожалуйста опытом .
Автор: igor_andreev
Дата сообщения: 04.03.2008 17:56
81sanek81
http://support.microsoft.com/kb/156276
Автор: 81sanek81
Дата сообщения: 04.03.2008 18:54
Благодарю!
Но я чё-то как-то недопонял на англисском, можно на русском озвучить?
Автор: igor_andreev
Дата сообщения: 04.03.2008 19:22
81sanek81

Код:
REGEDIT4

[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"DisableUNCCheck"=dword:00000001
Автор: 81sanek81
Дата сообщения: 04.03.2008 19:29
Ну понимаете в чём дело, получается что это изменение в реестре нужно внести на все локальные компьютеры в сети, чтобы сработал мой Bat-файл. Однако первоначальной целью у меня и стоит именно изменение параметров реестра (правда других), и для этого я и использую bat совместно с reg, так как не умею писать wsh/vbs сценарии, и не знаю как мне при загрузке всем пользователям внести изменения в реестр - замкнутый круг получается!
Автор: Joolz
Дата сообщения: 05.03.2008 08:12
81sanek81
Почему нельзя раскидать БАТник и REG-файл по сети, а потом уже с помощью GP его локально запускать?
Автор: igor_andreev
Дата сообщения: 05.03.2008 08:26
81sanek81
psexec попробуй(PSTools в шапке). У меня на всех компах стоит nnCron и при появлении D:\SHARE\net_nn.cmd выполняет его от имени залогинившегося юзера и потом удаляет net_nn.cmd. Так что я обычно просто пишу батник net_nn.cmd и раскидываю по сети
Автор: Takuja
Дата сообщения: 05.03.2008 09:35
ЧИТАТЬ ВСЕМ ГУРУ И ГОСУ

Nagual
то что ты предложил конечно хорошо, но я просил помочь не с тем. то я и сам могу создать.
У меня потребность есть в проверке задержки кашдого из узлов по направлению к адресату.
Например к майл ру у меня стоит 10 узлов, первый это мой гвард, второй это шлюз провайдера, третий это например хост мирового выхода, дальше мирового входа той страны где пункт назначения нашей проверки и т.д. аж до того хоста на катором обрабатываются запросы.
Вот мне необходимо получать задержку по каждому из них. по каждому из этих хостов.

Обычно для мониторинга пользуются програмой WinMTR.exe
но она отображает слишком много не нужной информации и не имеет возможности вывести это в нужном мне варианте.

А вот в СМД есть две команды ПИНГ и ТРЕЙС через трейс можно узнать весь путь, а через пинг - задержку к каждому из хостов по пути.

Вот мне нужно это организовать батничком, что бы выводился список такой как я указал раньше, в табличку, по строкам (секунды) по столбикам (задержки в милисенукдах)

Я бы это сам написал, но нехватает знаний с всякими переменными и строковыми манипуляциями.
Помогайте кто чем может.
Автор: Max441
Дата сообщения: 05.03.2008 09:55

Цитата:
Max441
насколько я понял тебе нужно что-то вроде
Код:@echo off
chcp 1251>nul
:next
set /p "c=Введите имя компьютера: "
set /p "l=Введите имя профиля: "
set q="\\%c%\C$\Documents and Settings\%l%\Local Settings\Application Data\test\"
if exist %q%bookmark_old.nsf (del/q %q%Cache.NDK&move/y %q%bookmark.nsf bookmark_old.nsf)
goto:next

отлично!!! то что нужно!




Добавлено:
Nagual
отлично!!! то что нужно!


Цитата:
Max441
насколько я понял тебе нужно что-то вроде
Код:@echo off
chcp 1251>nul
:next
set /p "c=Введите имя компьютера: "
set /p "l=Введите имя профиля: "
set q="\\%c%\C$\Documents and Settings\%l%\Local Settings\Application Data\test\"
if exist %q%bookmark_old.nsf (del/q %q%Cache.NDK&move/y %q%bookmark.nsf bookmark_old.nsf)
goto:next





Автор: igor_andreev
Дата сообщения: 05.03.2008 10:46
Takuja

Цитата:
А вот в СМД есть две команды ПИНГ и ТРЕЙС через трейс можно узнать весь путь, а через пинг - задержку к каждому из хостов по пути.


Код:
pathping /?
Автор: 01MDM
Дата сообщения: 05.03.2008 10:56
Takuja
А чем тебя не устраивает стандартная tracert.exe? Она как раз все это и выводит, кроме времени.
Можешь его добавить

Код:
@echo off
echo start tracert %time:~0,-3%
echo -------
for /f "skip=2 tokens=*" %%i in ('tracert ya.ru ^| findstr [0-9]') do echo %%i
echo -------
echo finish tracert %time:~0,-3%
Автор: Takuja
Дата сообщения: 05.03.2008 11:10
Парни, рассказываю. Сама программа tracert.exe меня устраивает, но она выводит одиночный запрос и отображает разовый запрос. А у меня такая проблема, что провайдер Экономит на трафике и делает это ночью. Потому мне нужно мониторить круглосуточно канал инета.
Можно было бы использовать просто tracert.exe и каждые 10 секунд дописывать в файл полученные данные, но вы подумайте как там будет удобно отследить время и потери? ВООБЩЕ помоему не реально. Да и вес такого журнала будет ППЦ какой.
Потому я и прошу помощи хотя бы помочь с tracert.exe
что бы просто не в столбик выводить хосты а в калонки.
что бы было примерно так

ВРЕМЯ ХОСТ1 ХОСТ2 ХОСТ3 ХОСТ4 ХОСТ5 ХОСТ6
10:12:00 3 2 * * * *
10:12:10 5 4 4 4 1 1
10:12:20 5 12 13 15 51 300

вот в такой таблице можно сразу увидеть по звёздочкам, в какое время и на каком сегменте сети не было интернета. а то Провайдер реально уже запарил.

Вот помогите мне поиграться с выводом tracert.exe.
Автор: angeltwo
Дата сообщения: 05.03.2008 15:05
81sanek81

А почему не использовать для изменений в реестре команду reg? Она позволяет сразу на удаленных компах изменять реестр (доступны ветки HKLM и HKU). Правда, неудобно все значения реестра руками прописывать в параметры команды (если их много). Хотя, если у тебя используется только команда regedit /s file.reg, то батник должен отработать, несмотря на то, что отругается на UNC путь (regedit как раз и лежит в директории WINDOWS). Только вместо file.reg пиши полный путь (\\comp\folder\file.reg)
Автор: wolf0425
Дата сообщения: 05.03.2008 15:45
Takuja, а ты не боишься что список ХОСТ1 ХОСТ2 ХОСТ3 ХОСТ4 ХОСТ5 ХОСТ6 - будет меняться в течение суток? За месяц он заведомо имеет шанс смениться...
Или это не узлы по пути до хоста, а сам список проверяемых на доступность хостов? Но тогда как убедишь провайдера в том, что виноват конкретно он, а не кто-то другой?

на предмет разбора вывода tracert и списков - кури for /?

как организовать запуск цикла c tracert каждые 1..10 минут - объяснять не надо?
проверять канал каждые 10 секунд - явный перебор...



Добавлено:
81sanek81

батник вида

Код: start /wait regedit -s "%~dp0Save1.reg"
Автор: 81sanek81
Дата сообщения: 05.03.2008 17:10
Спасибо за советы, но в данном случае самый простой выход - это вместо bat файла использовать скриптовый файл vbs (как мне посоветовали) - всего лишь одна команда:


Код:
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "regedit /s \\server\netlogon\regfile.reg"
Автор: angeltwo
Дата сообщения: 05.03.2008 17:26
81sanek81
так тебе и так батник в одну строчку посоветовали - даже короче, чем VBS))

А у меня вопрос следующего плана: в этом топике есть альтернатива команде echo, которая удаляет символы перехода на новую строку, но оставляет пробелы как разделители между словами. Поскольку я не силен в 16-чном представлении помогите плиз переделать его так, чтобы наоборот, не было пробелов после слов, а сразу шел символ перехода на новую строку. Заранее огромное спасибо всем откликнувшимся.
Автор: wolf0425
Дата сообщения: 05.03.2008 18:15
81sanek81 что характерно - батник и vbs делают совершенно одно и то же (запускают регедит с полным именем файла), только в vbs шара проиписана явно...

angeltwo, обрезать хвостовые пробелы в строках хочешь?
например так sed.exe -i -r "s/ +$//g" file.txt
наверно можно и проще, но так - точно устойчиво к произвольным символам в строке, да и утилита у меня всё равно есть (вместе с прочими unixutils)
Автор: Takuja
Дата сообщения: 05.03.2008 18:28
wolf0425
Ну каждые 10 секунд это конечно перебор, хотяб 1 раз в минуту.

про КУРИТЬ фор /? прости я не нарик не курю.
а в описании про таблицы для tracert - ничего нет.
Про список хостов по пути к конечному, было обдумано, на момент начала запросов, создается этот самый список, по каторому и происходит трасировка, и этот список смениться ну МАКСИМУМ после репуска самого трасера, это продумано мелкими еще при разработке.
Ктому же я попросил не флуда а помочь преобразовать выводные данные из списка, в таблицу.
Интересно кто нить поможет?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869

Предыдущая тема: Доступ к реестру через RegEdit?


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