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

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

Автор: 01MDM
Дата сообщения: 24.08.2007 12:53
slayer120

Цитата:
Больше никак нельзя определить что он usb ный?


Попробуй, что покажет

Код:
@Echo Off

for /f "skip=1 tokens=1,2 delims= " %%i in ('wmic diskdrive get deviceid^,interfacetype') do (
    echo %%i %%j
    )

Автор: slayer120
Дата сообщения: 24.08.2007 12:56

Цитата:
Но увы для такого hdd он не показывается как сменный, а как обычный диск.
Больше никак нельзя определить что он usb ный?

Сам себе отвечу . На 75 стр мне давали ссылку и там же я нашел замечательную утилитку спаcибо Nikzzzz.
Строчка для поиска буквы смонтированного usb будет выглядеть:

for /f "tokens=2* delims==" %%a in ('ListUsbDrives.exe^|findstr /l /i "mountpoint"') do (
echo %%a

ListUsbDrives.exe утилитка из набора работает с внешним usb, а не только с флешками.

Добавлено:
Вопрос по dir. Надо получить список файлов внутри нескольких папок.
отсортированный по времени записи например.
винт- arch
папка1
папка2

и тд
По команде
dir h:\arch /A:-D /B /S /O:d /T:W

файлы сортируются только внутри своих папок, т.е первым пойдет последний по времени записи файл из папки 1. А мне нужно, чтобы первым был самый ранний созданный файл.
Придется делать дир в файл результаты сортировать по параметрам и т.п.
С помощью только дир можно решить эту задачу?
Автор: Tipulatoid
Дата сообщения: 25.08.2007 04:06
slayer120
Если я правильно тебя понял, то так:

Код: dir h:\arch /A:-D /B /S /O:-d /T:c
Автор: slayer120
Дата сообщения: 25.08.2007 07:36
Tipulatoid
Никак он не выводит как мне надо - мне надо список всех файлов, упорядоченных по дате создания - выдается список упорядоченный, но
сначала все файлы 0 уровня затем файлы 1-го каталога 1-го уровня вложенности
2-го и т.д.
придется выводить в файл и сортировать
Автор: Tipulatoid
Дата сообщения: 25.08.2007 09:00
slayer120
Т.е. я правильно тебя понял, что тебе нужны в выводе только имена файлов, без полного пути к ним? Если так, то же можно пошаманить чуток. Сейчас подумаю.
Добавлено
Не придумал Наверное и вправду надо сортировать список. Получить список в виде, удобном для сортировки можно так:

Код: @echo off
for /r h:\arch %%a in (*) do (
echo %%~ftzaa>>list.txt
)
Автор: 01MDM
Дата сообщения: 25.08.2007 17:14
slayer120

Не проверял на больших списках, достаточно медленно. На маленьких папках вроде работает. Запускай из корня папки (d:\arch)


Код:
@echo off
for /r %%i in (*) do (
    set "file=%%i"
    call:list
    )
sort list.tmp /o list1.tmp
for /f "tokens=1,2,* delims= " %%i in ('type list1.tmp') do (
    echo %%j %%k >>list.txt
    )
del list*.tmp
type list.txt
goto:eof

:list
for /f "skip=4 tokens=1,4,* delims= " %%i in ('dir /a:-d /t:c "%file%" ^| find /v "байт"') do (
    set "_date=%%i"
    set "fname=%%j %%k"
call:sub
echo %sortindex% %fname% >>list.tmp
    )
goto:eof

:sub
for /f "tokens=1-3 delims=." %%i in ('echo %date%') do (
    set "cury=%%k"
    )
for /f "tokens=1-3 delims=." %%i in ('echo %_date%') do (
    set "cr_y=%%k"
    set "cr_m=%%j"
    set "cr_d=%%i"
    )

if %cr_m:~0,1% equ 0 set "cr_m=%cr_m:~1,1%"
if %cr_d:~0,1% equ 0 set "cr_d=%cr_d:~1,1%"

set /a "resy=%cury%-%cr_y%"
set /a "resm=12-%cr_m%"
set /a "resd=31-%cr_d%"

if %resm% leq 9 set "resm=0%resm%"
if %resd% leq 9 set "resd=0%resd%"

set "sortindex=%resy%%resm%%resd%"
goto:eof


Автор: ali1977
Дата сообщения: 25.08.2007 21:06
настроил в назначенных заданиях запуск батника
но почему то он в положенное время не запускается-вручную запускаю все работает
может ли это быть из-за того что у меня комп на работе без пароля? (дома комп с паролем, настроил - все срабатывает )
система windows xp sp2
Автор: vu1tur
Дата сообщения: 25.08.2007 21:16
ali1977
да, для шедулера нужен установленный не пустой пароль.
Автор: NIKZZZZ
Дата сообщения: 25.08.2007 21:33
slayer120

Цитата:
Надо получить список файлов внутри нескольких папок.
отсортированный по времени записи например.


Код: del temp.txt
for /r "c:\1" %%i in (*.*) do (
for /f "tokens=1-5* delims=.: " %%j in ("%%~ti") do echo %%l%%k%%j%%m%%n %%i>>temp.txt
)
for /r "c:\2" %%i in (*.*) do (
for /f "tokens=1-5* delims=.: " %%j in ("%%~ti") do echo %%l%%k%%j%%m%%n %%i>>temp.txt
)
type temp.txt | sort >result.txt
del temp.txt
Автор: slayer120
Дата сообщения: 26.08.2007 07:34
01MDM


Цитата:
for /f "skip=4 tokens=1,4,* delims= " %%i in ('dir /a:-d /t:c "%file%" ^| find /v "байт"') do (

так не пойдет будет много мусора. Правильно для русской локали:
| findstr /i /v "байт содержимое том всего" )

NIKZZZ

for /f "tokens=* delims=" %%i in ('dir <имя папки> /A:-D /B /S /O:-d /T:c') do (
for /f "tokens=1-3* delims=.: " %%j in ("%%~ti") do echo %%l%%k%%j %%i>>temp.txt
)
type temp.txt | sort /r > rez.txt

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

Спасибо всем откликнувшимся
Автор: AlessTO
Дата сообщения: 26.08.2007 08:58
Подскажите как можно быстро обновить оболочку? Необходимо чтобы при ассоциировании файлов их иконка и подпись менялись от "неизвестного типа" к дефолтному без перезагрузки.
Автор: Maza Faka
Дата сообщения: 26.08.2007 09:33
AlessTO
Попробуй так:

Код:
@echo off
taskkill /f /im explorer.exe
ping -n 4 localhost>nul
start explorer.exe
Автор: garniv
Дата сообщения: 26.08.2007 18:07
Maza Faka
А какую роль играет строчка с пингом?
Автор: alt76
Дата сообщения: 26.08.2007 18:16

Цитата:
А какую роль играет строчка с пингом?

пауза
Автор: SPV_Ed
Дата сообщения: 27.08.2007 14:03
Нужно сгенерировать текстовый файл со строками в формате "случайный набор из 13ти цифр;1". Пытался с помощью %random%, но с ним количество цифр разное выходит... У кого какие мысли?

Код: @echo off

set fileout=%~n0.txt
if exist %fileout% del /q %fileout%
setlocal enableextensions enabledelayedexpansion
set /p kolvo="kolichestvo: "
for /l %%i in (1,1,%kolvo%) do (
set rnd=!random!!random!!random!
echo !rnd!
echo !rnd!;1 >>%fileout%
)
endlocal
Автор: NIKZZZZ
Дата сообщения: 27.08.2007 14:39
SPV_Ed

Цитата:
случайный набор из 13ти цифр


Код: set rnd=000000000%random%%random%%random%%random%
set rnd=%rnd:~-13%
Автор: 01MDM
Дата сообщения: 27.08.2007 18:49
Интресно echo %random% выводится в Far'е, идет прирост значений +3 - +7, чем быстрее нажимешь Up Enter, тем меньше прирост. От чего вообще эта переменная высчитывается? От времени?
Автор: dshark16
Дата сообщения: 28.08.2007 18:02
Help, plz!
Необходимо узнать размер каталога со всеми подкаталогами и, если размер больше чего-го бросить send. Получилось вот так, но не совсем хорошо...
setlocal ENABLEEXTENSIONS
pushd %1
for /f "tokens=3" %%b in ('compact /S /Q^|findstr объемом') do set z=%%b
т.к. с %z не могу производить никакие мат. операции.
Попробовал пример отсюда: http://www.commandline.co.uk/lib/treeview/index.php - GetDirStat, но что-то не заработало.
Если эту проблему уже обсуждали, ткните plz.
Автор: NIKZZZZ
Дата сообщения: 28.08.2007 18:40
dshark16

Цитата:
т.к. с %z не могу производить никакие мат. операции.

Кто это сказал?
set /?


Автор: Lutvun
Дата сообщения: 28.08.2007 21:45
Тут появилась идея, но как реализоват к идеи не прилогалось. Можно ли написать батник который быт опредилял тип харда и если это например 320 Гбайтны то разбывал ево на разделы 20Гб:100Гб:всё остальное, такжэ например с 80 - 20Гб: и всё остальное. Щяс оиграюсь с командами фдиска, но врятли сам пойму как сделать
Автор: NIKZZZZ
Дата сообщения: 28.08.2007 22:00
Lutvun
Это можно сделать с помощью DiskPart.

Автор: dshark16
Дата сообщения: 29.08.2007 09:18
NIKZZZZ


Цитата:
[/q]
[q]Кто это сказал?
set /?


Пример: есть каталог объемом 860 309 байт. Запускаем батник:
setlocal ENABLEEXTENSIONS
pushd %1
for /f "tokens=3" %%b in ('compact /S /Q^|findstr объемом') do set z=%%b
echo %z%
set /A s=z+0
echo %s%
И что мы видим s=860, т.е. берется первая цифра до пробела. Как этот пробел убрать, чтобы воспринималось целое число? Вот так не получается:
SET s=%s: =%
А как? Вообщем вопрос остался!
Автор: NIKZZZZ
Дата сообщения: 29.08.2007 09:35
dshark16

Цитата:
Как этот пробел убрать


Код: chcp 1251
setlocal ENABLEEXTENSIONS
pushd %1
for /f "tokens=3,4,5,6 delims=я " %%b in ('compact /S /Q^|findstr объемом') do set z=%%b%%c%%d%%e
echo %z%
set /A s=z+0
echo %s%
Автор: Mitkasik
Дата сообщения: 29.08.2007 10:15
Здраствуйте, уважаемые!

Задача:
Есть два каталога.
Нужно чтобы второй по содержанию файлов стал равным первому.
При этом не трогать файлы с расширением *.tmp и не трогать подкаталоги.

Т.е. если 1\файл = 2\файл - не трогать
1\файл <> 2\файл - переписать
2\файл нет аналога в 1\ -удалить
Автор: king_stiven
Дата сообщения: 29.08.2007 10:28
Mitkasik

Цитата:
Т.е. если 1\файл = 2\файл - не трогать
1\файл <> 2\файл - переписать
2\файл нет аналога в 1\ -удалить


Приведи примеры файлов
Автор: vu1tur
Дата сообщения: 29.08.2007 10:30
Mitkasik
по-моему можно просто удалить второй каталог и переписать на его место первый

PS: прочти п. 1.9. главы VIII Соглашения по использованию.
Автор: Mitkasik
Дата сообщения: 29.08.2007 10:34
king_stiven

это сетевой диск, где я обновляю файлы:
s:\1\program.exe
s:\1\bibl_1.dll
s:\1\bibl_2.dll
s:\1\bibl_3.dll
s:\1\readme.txt
s:\1\func.exe
s:\1\user1.tmp
s:\1\user2.tmp
s:\1\2\program.exe
s:\1\3\readme.txt


нужно чтобы появился такой локальный каталог
с:\1\program.exe
с:\1\bibl_1.dll
с:\1\bibl_2.dll
с:\1\bibl_3.dll
с:\1\readme.txt
с:\1\func.exe

создать каталог, если его нет


Добавлено:
vu1tur
это не годится т.к. 90% запусков файлы не меняются, а копирование занимает продолжительное время. Нужно переписать только новые и убрать лишние.
Автор: Maza Faka
Дата сообщения: 29.08.2007 10:45
Mitkasik
Лучше Robocopy для твоей задачи не найти!
Автор: king_stiven
Дата сообщения: 29.08.2007 10:50
Mitkasik

что то вроде:
C:\2 первый каталог
C:\1 второй


Код: cd C:\1
for /f "usebackq tokens=*" %%d in (`dir "C:\2\*.*" /b /s /a:-d`) do (
if not exist %%~nxd (
del %%d
) else (
fc %%d %~nxd
if errorlevel 1 команда
)
)
Автор: vu1tur
Дата сообщения: 29.08.2007 10:59
Mitkasik

Цитата:
это не годится т.к. 90% запусков файлы не меняются, а копирование занимает продолжительное время. Нужно переписать только новые и убрать лишние.


xcopy никто не отменял. Опция /D
(удалять, конечно, в этом случае придется не всю папку, да)

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

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


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