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

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

Автор: Cosmogor
Дата сообщения: 15.05.2009 07:25
01MDM

Спасибо, скачал
Модераторы, а почему в шапке нету этих утилит.
Автор: ScreamWolf
Дата сообщения: 15.05.2009 11:09

Приветствую всех!
Где-то чуть меньше полугода изучаю батники и и применения... и... тут столкнулся со сложной для меня задачуй... Я до конца не изучил (для меня почему-то эти операторы сложноваты) FOR и SET (особенно первый) и поэтому никак не могу спрвиться с задачкой...

ВОТ УСЛОВИЕ
некая перменная CHEKFILE=nnnXmYYYY
где:
"n" - это латинские буквы (значение постоянное)
"X" - это цыфра от 1 до 9
"m" - это латинские буквы от "a" до "z"
"Y" - это число от 0000 до 9999

И САМА ЗАДАЧКА
необходимо создать счеткик для поска файла (переменная %CHEKFILE%)
что бы поиск начался с nnn1a0000
и закончился на nnn9z9999

при первом же совпадении (счетчик останавливаеться)
необходимо группированное выполнение команд с другими файлами
при этом создаюсться отдельные txt-файлы
в строках тела которых содиржится %CHEKFILE%,
значение которого развернуто в найденое имя файла
+ создание лога и завершение работы данного батника

лог необходим для того что бы запустив следующий раз он считывал данные с лог файла
и продолжил поиск с того имени на котором остановился прошлый раз


Помогите plz начинающему...
Автор: vitrzn
Дата сообщения: 15.05.2009 13:43
подскажите возможно ли это?
Есть список файлов !
нужно сохранить названия файлов в TXT , так чтобы был не просто список имён, а
имя файла -- дата файла -- время создания

Можно ли это батником?

команда dir выводит так
04.05.2009 11:03 1 852 CONS#1_1531.USR
04.05.2009 10:11 1 372 CONS#1_2227.USR
а надо:

CONS#1_1531.USR 04.05.2009 11:03 1 852
CONS#1_2227.USR 04.05.2009 10:11 1 372

Автор: ScreamWolf
Дата сообщения: 15.05.2009 14:51
vitrzn

Цитата:
нужно сохранить названия файлов в TXT , так чтобы был не просто список имён, а
имя файла -- дата файла -- время создания


http://www.dynawell.com/download/reskit/microsoft/win2000/forfiles.zip
Автор: KPOBABAK
Дата сообщения: 15.05.2009 15:10
подскажите батничек
необходимо выкидывать пользователя из системы если время его логина больше 17-00 и меньше 8-00
Автор: Cosmogor
Дата сообщения: 15.05.2009 18:02
Добрый день.

Подскажите пожалуйста по скрипту.

Код:

setlocal enabledelayedexpansion
for %%d in (c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do dir %%d:>nul 2>&1 && set zz=!zz!,%%d
echo %zz%


Скрипт выводит доступные диски

Переменная %zz%, это для всех дисков.
А как сделать переменную для последнего
диска? Даже если в системе один диск.
Вот у меня выводит 4 диска c,d,e,f
и мне нужна отдельная переменная для
диска f.

Спс.
Автор: 01MDM
Дата сообщения: 15.05.2009 18:16
Cosmogor


...&& set zz=%%d

Добавлено:
vitrzn

Код:
@echo off
for /f "tokens=*" %%i in ('dir /b') do echo %%~nxi %%~ti %%~zi
Автор: HaK1R
Дата сообщения: 15.05.2009 19:27
KPOBABAK

Код: @echo off
rem указываем задержку между проверками в секундах
set /a timesleep=60
rem Указываем время после которого выходит из системы:
set /a h1=17
set /a m1=0
set /a s1=0
rem Указываем время до которого выходит из системы:
set /a h2=8
set /a m2=0
set /a s2=0
set /a TimeInSec1=(%h1%*60+%m1%)*60+%s1%
set /a TimeInSec2=(%h2%*60+%m2%)*60+%s2%
set /a timesleep+=1

:check
for /f "tokens=1,2,3 delims=:" %%i in ("%time:~0,8%") do (set hh=%%i) & (set mm=%%j) & (set ss=%%k)
set /a TimeInSec=(%hh%*60+%mm%)*60+%ss%
if %TimeInSec% GEQ %TimeInSec1% (goto :TurnOff)
if %TimeInSec% Lss %TimeInSec2% (goto :TurnOff)
ping -n %timesleep% localhost>nul
goto :check

:TurnOff
shutdown -l -t 0
Автор: vitrzn
Дата сообщения: 15.05.2009 19:32
01MDM

Цитата:
vitrzn

Код:
@echo off
for /f "tokens=*" %%i in ('dir /b') do echo %%~nxi %%~ti %%~zi


Сортировку в окне батника вижу, а как теперь её сохранить в 1.txt ?
Автор: 01MDM
Дата сообщения: 15.05.2009 19:47
vitrzn

Цитата:
Сортировку в окне батника вижу, а как теперь её сохранить в 1.txt ?



Код:
@echo off
chcp 1251 1>nul
for /f "tokens=*" %%i in ('dir /b') do echo %%~nxi %%~ti %%~zi 1>>1.txt
Автор: WARRCAN
Дата сообщения: 15.05.2009 21:44
Подскажите пожалуйста, как сделать скрипт чтобы он открывал txt файл, добавлял в его конец текст из другого txt файла и сохранял его. Или подскажите, где поучиться, посмотреть...
Автор: vitrzn
Дата сообщения: 15.05.2009 21:53
01MDM
ВЫ КАК ВСЕГДА НА ВЫСОТЕ !!!
всё работает как надо !

А можно ещё ?!
Есть такой список, сделанный заранее (не более 50 строк):
Вася - CONS#1_1531.USR
Петя - CONS#1_2227.USR

после того как список есть в 1.txt можно ли его ещё разок дополнить по такому принципу
Вася - CONS#1_1531.USR 04.05.2009 11:03 1 852
Петя - CONS#1_2227.USR 04.05.2009 10:11 1 372
- CONS#1_1588.USR 04.05.2009 11:03 1 852
- CONS#1_2299.USR 04.05.2009 10:11 1 372
Т.е. если название файла совпадает с тем что напротив "Вася - CONS#1_1531.USR", то "Вася - " ставиться вначале строки.
А если такого совпадения нету, то ставиться вначале " - "

Автор: HaK1R
Дата сообщения: 15.05.2009 23:23
WARRCAN

Код: @echo off
set "FileRead=C:\read.txt"
set "FileWrite=C:\write.txt"
chcp 1251>nul
for /f "tokens=*" %%i in (%FileRead%) do echo %%i>>%FileWrite%
chcp 866>nul
Автор: WARRCAN
Дата сообщения: 15.05.2009 23:33
HaK1R, огромное спасибо! А можно сделать так, чтобы информация, которая добавляется, записывалась после пустой строчки (то есть, чтобы пропускалась одна строчка)?
Автор: HaK1R
Дата сообщения: 15.05.2009 23:38
WARRCAN

Код: @echo off
set "FileRead=C:\read.txt"
set "FileWrite=C:\write.txt"
chcp 1251>nul
echo.>>%FileWrite%
for /f "tokens=*" %%i in (%FileRead%) do echo %%i>>%FileWrite%
chcp 866>nul
Автор: vitrzn
Дата сообщения: 16.05.2009 08:46
HaK1R

Цитата:
Я правильно понимаю что есть не более 50 строчек в 1.тхт файле такого вида
Вася - CONS#1_1531.USR
Петя - CONS#1_2227.USR
а что сделать я не понял, можешь пояснить

Цитата:Т.е. если название файла совпадает с тем что напротив "Вася - CONS#1_1531.USR", то "Вася - " ставиться вначале строки.
А если такого совпадения нету, то ставиться вначале " - "

Цитата:если название файла совпадает с тем что напротив "Вася - CONS#1_1531.USR", то "Вася - " ставиться вначале строки

куда он ставится, если Вася там уже стоит?


Объсняю!
Есть список Name.txt в нём
Вася - CONS#1_1531.USR
Петя - CONS#1_2227.USR
и т.д. 50 строчек

Есть файлы CONS#1_1531.USR, CONS#1_2227.USR и т.д. кол-во может быть больше 50.

Нужно обработать эти файлы, взять имя+дата+время и сохранить в файл otchet.txt где будет список такого вида:
Вася - CONS#1_1531.USR 04.05.2009 11:03
Петя - CONS#1_2227.USR 04.05.2009 10:11
- CONS#1_1588.USR 04.05.2009 11:03
- CONS#1_2299.USR 04.05.2009 10:11

Т.е. построить отчёт (в txt) так чтобы было понятно кому принадлежит это CONS#1_1531.USR , в данном случае Вася - CONS#1_1531.USR , а если файл CONS#1_1599.USR нельзя сравнить со списком из Name.txt то тогда вначале либо " - " ну или вообще ни чего.

Задача обработать список файлов и сформировать один отчёт где будет видно когда эти файлы были созданы и кому принадлежат.

Список из Name.txt не обязательно отдельным файлом, можно и в батник запихнуть - не принципиально, главное итоговый otchet.txt .
Автор: HaK1R
Дата сообщения: 16.05.2009 09:30
vitrzn

Код: @echo off
set "DirPath=C:\test"
set "NameInFile=Name.txt"
set "Report=Report.txt"
chcp 1251>nul
pushd %DirPath%
for /f "tokens=*" %%i in ('dir /b *.USR') do (
findstr /i /c:%%i "%NameInFile%">nul 2>&1
if errorlevel 1 (
echo - %%i %%~ti>>%Report%
) else (
for /f "tokens=1,2 delims=-" %%a in (%NameInFile%) do (
if "%%b"==" %%i" (
echo %%a- %%i %%~ti>>%REport%%
)
)
)
)
popd
chcp 866>nul
Автор: king_stiven
Дата сообщения: 16.05.2009 10:32
Cosmogor
for %%e in (c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do if exist %%e: set Last=%%e:
Автор: Vimana2
Дата сообщения: 16.05.2009 11:04
Может, кто знает, как на удаленной машине из командной строки поменять значение реестра в ветке HKCR?
Автор: yurkesha
Дата сообщения: 16.05.2009 11:33
Vimana2
так как HKCR это алиас а не ветка то: HKCR = HKLM\SOFTWARE\Classes
Автор: HaK1R
Дата сообщения: 16.05.2009 11:44
Vimana2

Код: reg add /?
Автор: Vimana2
Дата сообщения: 16.05.2009 11:55
yurkesha
Точно Спасибо!
Автор: XXXXL
Дата сообщения: 16.05.2009 21:39
Здравствуйте!
Тут постоянно не понятная проблема возникает... вообщем есть простой батник он всё время перезапускает сам себя:

Код: :loo
wget -E --load-cookies=cookies.txt http://site.ru
sleep.exe 60
goto loo
Автор: basstard
Дата сообщения: 17.05.2009 06:20
хочу научиться создавать zip'ы стандартными средствами

все, чего пока удалось добиться, это выяснил, что для создания zip'ов
vista использует zipfldr.dll, также, если создать файл с именем
<любое_имя>.ZFSendToTarget то этим файлом можно пользоваться
так же как архиватором, перетаскивая на него объекты.
однако, из командной строки, например:

Код: <любое_имя>.ZFSendToTarget %1
Автор: Cosmogor
Дата сообщения: 17.05.2009 06:32
Вот, создал, батник резервного копирования данных.
По всему форуму собирал идеи.
В батнике успользуются утилиты RAR.EXE и FORFILES.exe

Суть батника такова:
Проверяется наличие дисков в системе,
и на самом последнем диске создаётся папка Backup
Потом один раз в сутки создаются архивные копии
папок Рабочего стола и Мои документы, и помещаются
в папку Backup
Затем архивные файлы старше трёх дней удаляются
из папки Backup.

[more]REM @ECHO OFF
Chcp 1251>nul

REM Поиск доступных дисков
setlocal enabledelayedexpansion
for %%d in (b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do dir %%d:>nul 2>&1 && set zz=%%d

REM Проверка на наличие папки Backup
IF EXIST "%zz%:\Backup" GOTO TMP_TMP
IF NOT EXIST "%zz%:\Backup" GOTO MD
EXIT

:TMP_TMP
REM Проверка на наличие файла TMP.TMP
IF EXIST "%zz%:\Backup\TMP.TMP" GOTO FC
IF NOT EXIST "%zz%:\Backup\TMP.TMP" GOTO D_TMP
EXIT

:MD
REM Создание папки Backup
MD "%zz%:\Backup"
GOTO D_TMP
EXIT

_TMP
rem вычисление дня недели для Windows 2000 (в XP должна тоже работать)
rem начиная с 2001г. по 2099г. включительно (алгоритм тестировался в Еxcel)
rem в конце вычислений %dD% содержит день недели: 0 - понедельник .. 6 - воскресенье
rem by othy
setlocal
SET dt=%Date%
SET dY=%dt:~-2%
SET dD=%dt:~-10,2%
SET dM=%dt:~-7,2%
If "%dD:~0,1%" == "0" Set dD=%dD:~1,1%
If "%dM:~0,1%" == "0" Set dM=%dM:~1,1%
If "%dY:~0,1%" == "0" Set dY=%dY:~1,1%
SET /A fY="dY & 0x03"
If %dM%==1 (If %fY%==0 (Set /A dD+=4) else Set /A dD+=5)
If %dM%==2 (If %fY%==0 (Set /A dD+=7) else Set /A dD+=8)
If %dM%==3 (Set /A dD+=8)
If %dM%==4 (Set /A dD+=11)
If %dM%==5 (Set /A dD+=6)
If %dM%==6 (Set /A dD+=9)
If %dM%==7 (Set /A dD+=11)
If %dM%==8 (Set /A dD+=7)
If %dM%==9 (Set /A dD+=10)
If %dM%==10 (Set /A dD+=5)
If %dM%==11 (Set /A dD+=8)
If %dM%==12 (Set /A dD+=10)
SET /A dD=(dD+dY/4+dY) %% 0x07
echo %dD% >"%zz%:\Backup\TMP.TMP"
endlocal
GOTO RAR
EXIT

:FC
rem вычисление дня недели для Windows 2000 (в XP должна тоже работать)
rem начиная с 2001г. по 2099г. включительно (алгоритм тестировался в Еxcel)
rem в конце вычислений %dD% содержит день недели: 0 - понедельник .. 6 - воскресенье
rem by othy
setlocal
SET dt=%Date%
SET dY=%dt:~-2%
SET dD=%dt:~-10,2%
SET dM=%dt:~-7,2%
If "%dD:~0,1%" == "0" Set dD=%dD:~1,1%
If "%dM:~0,1%" == "0" Set dM=%dM:~1,1%
If "%dY:~0,1%" == "0" Set dY=%dY:~1,1%
SET /A fY="dY & 0x03"
If %dM%==1 (If %fY%==0 (Set /A dD+=4) else Set /A dD+=5)
If %dM%==2 (If %fY%==0 (Set /A dD+=7) else Set /A dD+=8)
If %dM%==3 (Set /A dD+=8)
If %dM%==4 (Set /A dD+=11)
If %dM%==5 (Set /A dD+=6)
If %dM%==6 (Set /A dD+=9)
If %dM%==7 (Set /A dD+=11)
If %dM%==8 (Set /A dD+=7)
If %dM%==9 (Set /A dD+=10)
If %dM%==10 (Set /A dD+=5)
If %dM%==11 (Set /A dD+=8)
If %dM%==12 (Set /A dD+=10)
SET /A dD=(dD+dY/4+dY) %% 0x07
echo %dD% >"%zz%:\Backup\D.TMP"
endlocal
fc /l "%zz%:\Backup\D.TMP" "%zz%:\Backup\TMP.TMP"
if not errorlevel 1 GOTO EXIT
GOTO NO
EXIT

:EXIT
msg * Сегодняшние архивы есть, выходим!.
DEL /Q "%zz%:\Backup\TMP.TMP"
REN "%zz%:\Backup\D.TMP" "TMP.TMP"
EXIT

:NO
FORFILES /p "%zz%:\Backup" /m *.rar /d -3 /c "cmd /c del /f /q @file"
DEL /Q "%zz%:\Backup\TMP.TMP"
REN "%zz%:\Backup\D.TMP" "TMP.TMP"
GOTO RAR
EXIT

:RAR
RAR.EXE a "%zz%:\Backup\Рабочий_стол" -r -m0 -ep1 o+ -ag_YYYY.MM.DD-HH.MM "%USERPROFILE%\Рабочий стол"
RAR.EXE a "%zz%:\Backup\Мои_документы" -r -m0 -ep1 o+ -ag_YYYY.MM.DD-HH.MM "%USERPROFILE%\Мои документы"
GOTO END
EXIT

:END
msg * Архивирование завершено
EXIT


rem Pause[/more]

У меня вопрос, а попроще что я тут понаписал,
нельзя сделать?
В принципе он неплохо работает, но я хочу
услышать мнения других.
Автор: HaK1R
Дата сообщения: 17.05.2009 10:12
Cosmogor
Проще это как? Можно сделать чтобы объем меньше был, в частности не разбивать на функции :TMP_TMP :MD и еще :FC & _TMP состоят на 4/5 из одного и их тоже можно слить
Автор: Cosmogor
Дата сообщения: 17.05.2009 10:31
HaK1R

Вот-вот , обьём меньше чтоб был
Автор: HaK1R
Дата сообщения: 17.05.2009 10:56
Cosmogor
У меня вот так получилось, но я не проверял

Код: @ECHO OFF
Chcp 1251>nul

REM Поиск доступных дисков
setlocal enabledelayedexpansion
for %%d in (b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do dir %%d:>nul 2>&1 && set zz=%%d

REM Проверка на наличие папки Backup
IF EXIST "%zz%:\Backup" (
REM Проверка на наличие файла TMP.TMP
IF EXIST "%zz%:\Backup\TMP.TMP" (
call :FC
) else (
call _TMP
call :RAR
)
) else (
REM Создание папки Backup
MD "%zz%:\Backup"
call _TMP
call :RAR
)
chcp 866>nul
goto :EOF


_TMP
rem вычисление дня недели для Windows 2000 (в XP должна тоже работать)
rem начиная с 2001г. по 2099г. включительно (алгоритм тестировался в Еxcel)
rem в конце вычислений %dD% содержит день недели: 0 - понедельник .. 6 - воскресенье
rem by othy
setlocal
SET dt=%Date%
SET dY=%dt:~-2%
SET dD=%dt:~-10,2%
SET dM=%dt:~-7,2%
If "%dD:~0,1%" == "0" Set dD=%dD:~1,1%
If "%dM:~0,1%" == "0" Set dM=%dM:~1,1%
If "%dY:~0,1%" == "0" Set dY=%dY:~1,1%
SET /A fY="dY & 0x03"
If %dM%==1 (If %fY%==0 (Set /A dD+=4) else Set /A dD+=5)
If %dM%==2 (If %fY%==0 (Set /A dD+=7) else Set /A dD+=8)
If %dM%==3 (Set /A dD+=8)
If %dM%==4 (Set /A dD+=11)
If %dM%==5 (Set /A dD+=6)
If %dM%==6 (Set /A dD+=9)
If %dM%==7 (Set /A dD+=11)
If %dM%==8 (Set /A dD+=7)
If %dM%==9 (Set /A dD+=10)
If %dM%==10 (Set /A dD+=5)
If %dM%==11 (Set /A dD+=8)
If %dM%==12 (Set /A dD+=10)
SET /A dD=(dD+dY/4+dY) %% 0x07
echo %dD% >"%zz%:\Backup\TMP.TMP"
endlocal
goto :EOF

:FC
call _TMP
fc /l "%zz%:\Backup\D.TMP" "%zz%:\Backup\TMP.TMP"
if errorlevel 1 (
FORFILES /p "%zz%:\Backup" /m *.rar /d -3 /c "cmd /c del /f /q @file"
DEL /Q "%zz%:\Backup\TMP.TMP"
REN "%zz%:\Backup\D.TMP" "TMP.TMP"
call :RAR
) else (
call :EXIT
)
goto :EOF

:EXIT
msg * Сегодняшние архивы есть, выходим!.
DEL /Q "%zz%:\Backup\TMP.TMP"
REN "%zz%:\Backup\D.TMP" "TMP.TMP"
goto :EOF

:RAR
RAR.EXE a "%zz%:\Backup\Рабочий_стол" -r -m0 -ep1 o+ -ag_YYYY.MM.DD-HH.MM "%USERPROFILE%\Рабочий стол"
RAR.EXE a "%zz%:\Backup\Мои_документы" -r -m0 -ep1 o+ -ag_YYYY.MM.DD-HH.MM "%USERPROFILE%\Мои документы"
msg * Архивирование завершено
goto :EOF
Автор: Cosmogor
Дата сообщения: 17.05.2009 12:06
HaK1R

Спасибо.
EXIT исправлю.
Автор: ScreamWolf
Дата сообщения: 18.05.2009 09:19

Цитата:

Приветствую всех!
Где-то чуть меньше полугода изучаю батники и и применения... и... тут столкнулся со сложной для меня задачуй... Я до конца не изучил (для меня почему-то эти операторы сложноваты) FOR и SET (особенно первый) и поэтому никак не могу спрвиться с задачкой...

ВОТ УСЛОВИЕ
некая перменная CHEKFILE=nnnXmYYYY
где:
"n" - это латинские буквы (значение постоянное)
"X" - это цыфра от 1 до 9
"m" - это латинские буквы от "a" до "z"
"Y" - это число от 0000 до 9999

И САМА ЗАДАЧКА
необходимо создать счеткик для поска файла (переменная %CHEKFILE%)
что бы поиск начался с nnn1a0000
и закончился на nnn9z9999

при первом же совпадении (счетчик останавливаеться)
необходимо группированное выполнение команд с другими файлами
при этом создаюсться отдельные txt-файлы
в строках тела которых содиржится %CHEKFILE%,
значение которого развернуто в найденое имя файла
+ создание лога и завершение работы данного батника

лог необходим для того что бы запустив следующий раз он считывал данные с лог файла
и продолжил поиск с того имени на котором остановился прошлый раз


Помогите plz начинающему...



Ну плиз подсобите с батничком...

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: SAS.Планета (часть 2)


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