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

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

Автор: HaK1R
Дата сообщения: 09.07.2009 16:49
Malegik79

Код: @echo off
setlocal enabledelayedexpansion
set date=%data%
if %date:~0,1%==0 (
set /a dd=%date:~1,1%
) else (
set /a dd=%date:~0,2%
)
if %date:~3,1%==0 (
set /a mm=%date:~4,1%
) else (
set /a mm=%date:~3,2%
)
set /a yyyy=%date:~-4%
set /a ficsyyyy=2007
set /a daysago=0
call:kountdays
set /a daysago=%daysago%-7*(%daysago%/7)
set /a week=1
set /a monday=%dd%-%daysago%
call :numweek
call :nummonth
md "%month%_%week%" 1>nul 2>&1
goto:eof

:nummonth
if %mm%==1 (set month=Jan&goto :EOF)
if %mm%==2 (set month=Feb&goto :EOF)
if %mm%==3 (set month=Mar&goto :EOF)
if %mm%==4 (set month=Apr&goto :EOF)
if %mm%==5 (set month=May&goto :EOF)
if %mm%==6 (set month=Jun&goto :EOF)
if %mm%==7 (set month=Jul&goto :EOF)
if %mm%==8 (set month=Aug&goto :EOF)
if %mm%==9 (set month=Sep&goto :EOF)
if %mm%==10 (set month=Oct&goto :EOF)
if %mm%==11 (set month=Nov&goto :EOF)
if %mm%==12 (set month=Dec&goto :EOF)
goto :EOF
:numweek
if %monday% LEQ 0 (goto :EOF)
set /a week+=1
set /a monday-=7
goto :numweek
:kountdays
set /a leapyear=%ficsyyyy%-1
set /a leapyear=%leapyear%-4*(%leapyear%/4)
set /a leapyear=(%leapyear%+1)/4
if %yyyy% GTR %ficsyyyy% (
set /a daysago+=365+%leapyear%
set/a ficsyyyy+=1
goto:kountdays
)
if %mm%==1 (set /a daysago+=0)
if %mm%==2 (set /a daysago+=31)
if %mm%==3 (set /a daysago+=59)
if %mm%==4 (set /a daysago+=90)
if %mm%==5 (set /a daysago+=120)
if %mm%==6 (set /a daysago+=151)
if %mm%==7 (set /a daysago+=181)
if %mm%==8 (set /a daysago+=212)
if %mm%==9 (set /a daysago+=243)
if %mm%==10 (set /a daysago+=273)
if %mm%==11 (set /a daysago+=304)
if %mm%==12 (set /a daysago+=334)
if %mm% geq 3 (set /a daysago+=%leapyear%)
set /a daysago+=%dd%-1
goto:eof
Автор: quakerock
Дата сообщения: 10.07.2009 08:17
To 01MDM

Спасибо огромно. Все заработало=) Собака была зарыта в том, что я куда только не закинул этот приславутый exclude.txt, но до исходника не дошел.
Автор: Malegik79
Дата сообщения: 10.07.2009 09:34
01MDM
HaK1R
Респектище вам огромное оба варианта отрабатывают как надо)
Автор: shotgunsneon
Дата сообщения: 11.07.2009 08:54
Всем привет! Есть вот такая задачка:
С помощью батника необходимо создавать текстовые документы на подобии как это делает Windows (Текстовый документ.txt, Текстовый документ (2).txt, Текстовый документ (3).txt и т.д.).
Я честно попытался реализовать это сам, но у меня ничего не получилось) Вот что я написал:

@echo off
set i=0
for %%i in ("file.txt") do (set /a new_num=i + 1)
.> file(%new_num%).txt 2>nul
start file(%new_num%).txt

Текстовый документ создается, но всегда с одним именем, при этом старый txt затирается. Как сделать так, чтобы при наличии файла file(1).txt автоматически создавался файл file(2).txt. Или если есть file(2).txt, то создавался file(3).txt и т.д.

Я планировал в переменную i занести конечную цифру в имени файла, но не знаю как это реализовать)
Автор: HaK1R
Дата сообщения: 11.07.2009 12:01
shotgunsneon

Код: @echo off
chcp 1251 1>nul
set /a i=2
set "name=Текстовый документ"
if not exist "%name%.txt" (
.>"%name%.txt" 2>nul
start "" "%name%.txt"
goto :EOF
)
:2
if not exist "%name% (%i%).txt" (
.>"%name% (%i%).txt" 2>nul
start "" "%name% (%i%).txt"
goto :EOF
)
set /a i+=1
goto :2
Автор: shotgunsneon
Дата сообщения: 11.07.2009 13:37
HaK1R
Первый вариант прямо то что я хотел, спасибо большое)
Автор: vitrzn
Дата сообщения: 12.07.2009 00:13
А как можно к имени файла добавить "_дата_время создания" ?
т.е. было proba.txt от 11-07-2009 1:00
переменовали в proba_11-07-2009_1_00.txt
При этом имя файла нам заранее не известно ;( , т.е. надо переменовать все файлы. но с определённым расширением. (по маске)
Автор: Maza_Faka
Дата сообщения: 12.07.2009 07:22
vitrzn
К имени файла добавляется дата модификации файла:

Код:
@Echo Off

Set Folder=C:\Temp

For %%A In (%Folder%\*.*) Do Call :_Ren "%%A"
Pause

GoTo :EOF

:_Ren
Set nTime=%~t1
Set nTime=%nTime: =_%
Set nTime=%nTime::=_%

Ren %1 "%~n1_%nTime%%~x1"
Автор: 01MDM
Дата сообщения: 12.07.2009 07:23
vitrzn

Код:
@echo off
setlocal

for /f "tokens=*" %%i in ('dir /b *.txt') do set "postfix=%%~ti" && call:ren "%%i"
goto:eof

:ren
set "postfix=%postfix:.=-%"
set "postfix=%postfix::=_%"
set "postfix=%postfix: =_%"
ren %1 "%~n1_%postfix%%~x1"
Автор: newhk
Дата сообщения: 13.07.2009 09:56
спасибо огромное
Автор: TNR
Дата сообщения: 14.07.2009 14:45
Подскажите как реализовать закачку с ftp только вновь появившихся там файлов... не закачивая предидущие ... ???
Автор: HaK1R
Дата сообщения: 14.07.2009 20:48
TNR

Цитата:
только вновь появившихся там файлов

значит тех, которые появились "сегодня"?
Автор: TNR
Дата сообщения: 15.07.2009 02:02
HaK1R
да... и нужно чтобы из всех файлов которые будут появлятся качался только самый новый файл на момент загрузки
Автор: KEM
Дата сообщения: 15.07.2009 09:56
Подскажите как сделать поиск и удаление файлов по маске(по расширению или по полному имени файла или только по имени)? Возможно есть где почитать про это поподробнее.
Автор: 01MDM
Дата сообщения: 15.07.2009 10:35
KEM

Код:
del /s /a C:\*.txt
Автор: KEM
Дата сообщения: 15.07.2009 13:08

Цитата:
KEM
Код:
del /s /a C:\*.txt
Удалит все *.txt с диска C:
Тоже самое если удалять по имени - filename.*

ЗЫ. Поосторожней с этим..


А со всех дисков?
Автор: 01MDM
Дата сообщения: 15.07.2009 13:23
KEM

Код:
@echo off
for %%i in (q w e r t y u i o p s d f g h j k l z x c v n m) do (
if exist %%i: del /s /a %%i:\*.txt
)
Автор: ScreamWolf
Дата сообщения: 15.07.2009 13:43
Помогите с кодиком...

Код: for /f "tokens=1,2,3 delims=:" %%a in ('echo %time:~0,8%') do (
set hh=%%a
set mm=%%b
set ss=%%c
set h1=%%:~0,-1a
set m1=%%:~0,-1b
set s1=%%:~0,-1c
set h2=%%:~1a
set m2=%%:~1b
set s2=%%:~1c
)
Автор: Elroir
Дата сообщения: 15.07.2009 16:12
ScreamWolf

Код:
setlocal enabledelayedexpansion
for /f "tokens=1,2,3 delims=:" %%a in ('echo %time:~0,8%') do (
set hh=%%a
set mm=%%b
set ss=%%c
set h1=!hh:~0,-1!
set m1=!mm:~0,-1!
set s1=!ss:~0,-1!
set h2=!hh:~1!
set m2=!mm:~1!
set s2=!ss:~1!
)
Автор: ScreamWolf
Дата сообщения: 15.07.2009 16:26
Elroir
спасибо...
а setlocal enabledelayedexpansion обязательно?

и у меня возник еще вопросик...
хочу чтобы батник создавал скрипт и запускал его
а смысл скрипта это вопрос с вариантами ДА или НЕТ
и после выполнения скрипта в батник возвращался код возврата...

HS_MESSAGE - не предлагать, т к некоторые антивиры воспринимают его за вирь!
через SET /p не очень хочется... т к в батнике многое через скрипты запускает и как-то портить общую картину... =(
Автор: igor_andreev
Дата сообщения: 15.07.2009 21:50

Цитата:
чтобы батник создавал скрипт и запускал его
а смысл скрипта это вопрос с вариантами ДА или НЕТ
и после выполнения скрипта в батник возвращался код возврата...

Типа такого:

Код:
@echo off
echo.WScript.Quit(MsgBox("Are you sure?",292+4096,"Delete file"))>tmp.vbs
cscript tmp.vbs //nologo
echo %errorlevel%
del tmp.vbs
Автор: Elroir
Дата сообщения: 16.07.2009 10:35
ScreamWolf

Цитата:
а setlocal enabledelayedexpansion обязательно?

Да.
http://forum.ru-board.com/topic.cgi?forum=62&topic=9040&start=633&limit=1
Автор: ScreamWolf
Дата сообщения: 16.07.2009 16:38
igor_andreev
спасибо, то что нада))

Добавлено:
Elroir

Цитата:
Я отвечал на этот вопрос на 28-й странице:

прости, помню что где-то видел...

спасибо за инфу

Добавлено:
igor_andreev
а можешь подсказать еще коды кнопок, типа Отмена, Повтор, ОК, и есть ли возможность так же указать значение окна типа Вопрос, Предупреждение, Ошибка и т.д....

Буду очень презнателен


Добавлено:
igor_andreev
уже не надо, нашел Статейку
Автор: daks12
Дата сообщения: 16.07.2009 17:02
Спецы, вопрос. Просмотрел эту ветку, покопал кучу инфы. Задача тривиальна: вывести в переменную текущий день недели (для подставления потом в параметры ntbackup'a). Не получается. Для наглядности пробую пока создавать папку вместо переменной. Делаю так:
for /f "tokens=*" %%i in ('wmic path win32_LocalTime get DayOfWeek') do ( mkdir %%i )
В результате создаются две папки: "4" (четверг сегодня) и DayOfWeek. А вызывается mkdir трижды почему-то. В третий раз ей передается какой-то непечатный символ. Результат если запустить батник дважды (для наглядности, первы раз он папки молча создаст):

D:\Backup_work\1>2
Подпапка или файл DayOfWeek уже существует.
Подпапка или файл 4 уже существует.
Ошибка в синтаксисе команды.

Соответственно нужно отфильтровать для перебора только те значения, где присутствуют цифры, причем в начале переменной. Делаю:

for /f "tokens=*" %%i in ('wmic path win32_LocalTime get DayOfWeek ^| findstr ^[0-9]*') do ( mkdir %%i )

Получаю то же самое Как бы отфильтровать последний результат, довольствуясь первыми двумя (DayOfWeek и 4) Самое интересное, что на XP отрабатывает нормально. А на W2k3 ошибка.
Автор: ScreamWolf
Дата сообщения: 16.07.2009 17:08
где ошибка?

пишу в OEM

Код: set cnf=%systemdrive%\config.cnf
if not exist "%cnf%"(
echo %time:~0,8% Файл конфигурации не найден!
echo %time:~0,8% Возможно это первый запуск...
) else (
echo %time:~0,8% Найден файл конфигурации
set ttl=Установка
set wdw=Просмотреть файл конфигурации?
chcp 1251 >nul
echo.WScript.Quit(MsgBox("%wdw%",292+4096,"%ttl%"))>tmp.vbs
chcp 866 >nul
cscript tmp.vbs //nologo
if %errorlevel%==6 (
echo %time~0,8% Просмотр файл конфигурации
echo --------------------------------------------------------------Файл конфигурации
type %conf%
echo -------------------------------------------------------------------------------
)
del tmp.vbs
)
pause
Автор: daks12
Дата сообщения: 16.07.2009 18:12

Цитата:
Код:
@echo off
for /f "tokens=*" %%i in ('wmic path win32_LocalTime get DayOfWeek') do set day=%%i
echo %day%
pause

В том-то и дело, что так изначально и делал. У меня на другом компе (WinXP) скрипт, построенный на этой конструкции давно и успешно работает. Интересовало, почему на серваке W2K3 он не отрабатывает. Данный результат пишет вот что:

D:\Backup_work\1>3
Режим вывода команд на экран (ECHO) отключен.
Для продолжения нажмите любую клавишу . . .

А если заменять echo %day% на mkdir %day%, то

D:\Backup_work\1>3
Ошибка в синтаксисе команды.
Для продолжения нажмите любую клавишу . . .

То есть последним ему передается какой-то символ, при передаче которого команде mkdir получаем ошибку в синтаксисе!

Цитата:
Посмотри еще здесь

Видел, нужно именно через wmi, понять почему не работает, хотя должно! А то - все-таки хоть и рабочий, но костыль.

Автор: ScreamWolf
Дата сообщения: 16.07.2009 18:28
daks12
у меня вроде работает на ура и в ХП и 2000-2003

выполни

Код: for /f "tokens=*" %%i in ('wmic path win32_LocalTime get DayOfWeek') do echo %%i >>log.txt
Автор: daks12
Дата сообщения: 16.07.2009 18:51
Результат команды 3.bat:

D:\Backup_work\1>3

D:\Backup_work\1>chcp 1251 1>nul

D:\Backup_work\1>for /F "tokens=*" %i in ('wmic path win32_LocalTime get DayOfWe
ek') do echo %i 1>>log.txt

1>>log.txt k\1>echo DayOfWeek

1>>log.txt k\1>echo 4

1>>log.txt k\1>echo

D:\Backup_work\1>

Содержимое log.txt:

DayOfWeek
4
Режим вывода команд на экран (ECHO) включен.

То есть последний раз вызывается с пустой строкой в качестве параметра и честно говорит состояние эха, включено или нет. Посмотрел в хексе -

00000000 44 61 79 4F │ 66 57 65 65 │ 6B 20 20 0D │ 20 0D 0A 34 │ 20 20 20 20 │ 20 20 20 20 │ 20 20 0D 20 │ 0D 0A D0 E5 DayOfWeek . ..4 . ....
00000020 E6 E8 EC 20 │ E2 FB E2 EE │ E4 E0 20 EA │ EE EC E0 ED │ E4 20 ED E0 │ 20 FD EA F0 │ E0 ED 20 28 │ 45 43 48 4F ... ...... ...... .. ..... (ECHO
00000040 29 20 E2 EA │ EB FE F7 E5 │ ED 2E 0D 0A │ ) ..........


Добавлено:
Эхх, не совсем корректно отобразило.
Цитата:
│
- это вертикальные черточки. Остальное - точками, патамушо кодировка вражеская - 866 кодовая, а у меня тут UTF8, но хекс-коды правильные.
Автор: ScreamWolf
Дата сообщения: 16.07.2009 19:15
daks12
паразительно...

у меня

cmd

Цитата:

C:\Documents and Settings\Admin\Рабочий стол>for /F "tokens=*" %i in ('wmic path
win32_LocalTime get DayOfWeek') do echo %i 1>>log.txt

1>>log.txt and Settings\Admin\Рабочий стол>echo DayOfWeek

1>>log.txt and Settings\Admin\Рабочий стол>echo 4

C:\Documents and Settings\Admin\Рабочий стол>pause
Для продолжения нажмите любую клавишу . . .


результат LOG.txt

Цитата:
DayOfWeek

4



у тя полные права админа?
какая ось и сп?
Автор: igor_andreev
Дата сообщения: 16.07.2009 19:15

Цитата:
вводимый пароль был бы скрыт под звездочками?

http://www.microsoft.com/technet/scriptcenter/resources/qanda/feb05/hey0204.mspx
вообще показываться не будет

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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