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

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

Автор: vax
Дата сообщения: 25.09.2005 13:20
caxap

Цитата:
Други, подскажите, можно-ль из командной строки пользуя IE или F.F. сохранить на винт страницу с конкретного адреса в инете. Можно без картинок (с ними, оно конечно, совсем замечательно буде)?


Я это делаю при помощи Wget. На ура.
Виндовый wget можно взять на cygwin'е - например тут: ftp://ftp.citkit.ru/pub/sourceware/cygwin/release/wget/

Если захочет какие-либо dll (типа cygwin1.dll) - смотри там-же чуть выше по дереву.

Автор: SEMENYCH
Дата сообщения: 26.09.2005 09:34
KapralBel
Smitis
люди я идиот - неправильно сформулировал задачу! прошу прощения, но задача стоит при ежедневном архивировании папок не освежить/обновить файлы в архивах, а ЕСЛИ файлы в папках изменились, ТО сделать архив за сегодняшнее число.
Автор: Smitis
Дата сообщения: 26.09.2005 13:29
SEMENYCH
Ну тогда попробывать по атрибуту "А". Например, если команда dir /b/s/aa выдаёт не нулевое количество файлов, значит что-то изменилось и архивировать, не забыв сбросить файловые атрибуты "А".
Автор: SEMENYCH
Дата сообщения: 26.09.2005 14:20
Smitis
спасибо, буду пробовать!
Автор: KapralBel
Дата сообщения: 27.09.2005 10:21
SEMENYCH
Так мой способ это и делает - заносит в новый архив только измененные и новые файлы и сбрасывает для них аттрибут Архивный.
Если нет таких файлов то и архив не создается.
на следующую архивацию эти файлы уже не обрабатываются
см. ключи командной строки -ac и -ao
Автор: Smitis
Дата сообщения: 28.09.2005 12:38
KapralBel
Ему этот способ чем-то не понравился. А может объяснили плохо
Автор: bredonosec
Дата сообщения: 29.09.2005 05:21

Цитата:
а ЕСЛИ файлы в папках изменились, ТО сделать архив за сегодняшнее число.
- дык..

Xcopy источник приемник /:дата
-копировать только файлы, модифицированные после указанной даты (формат даты - по рег. установкам)
А потом что-то вроде
pkzip приемник > file.zip (забыл, какая команда дату выдает в имя файла)

(предыдущий способ не нашел, потоум не знаю, то же самое подумал, али другое)
Автор: KapralBel
Дата сообщения: 29.09.2005 09:30
bredonosec

Если бы SEMENYCH ответил помог ему хоть один способ или мой или твой (оба рабочих) или не помог и почему.
А так будем гадать и предлагать различные варианты....
Автор: Iacoyn
Дата сообщения: 11.10.2005 01:18
Люди добрые, помогите коллективным разумом!
Есть задача в папке WINDOWS после установки апдейтов создаются подпапки типа $NT...$ с которыми комманды cmd.exe работать отказываются - как их на автомате удалять?
del не срабатывает ни на $*$ ни $$*$$, в чём я не прав?
Автор: KapralBel
Дата сообщения: 11.10.2005 09:52
Iacoyn
Del - не удаляет папки, а только файлы
Rd - удаляет,
Попробуй явно указать
RD $NtServicePackUninstall$ /q /s
Автор: bredonosec
Дата сообщения: 18.10.2005 06:27
Если внутри что-то есть, то RD (по крайней мере, согласно досу 6,22) не удаляет, требует опустошения папки.
Чтоб удалить целиком - deltree [ключи, имена, трафаретные знаки]
//лень вспоминать синтаксис )
Автор: KapralBel
Дата сообщения: 18.10.2005 09:40
bredonosec
RD <Папка> /Q /S - Удаляет <Папка>, со всеми подпапками и файлами (/s)? и без вопросов (/q)
Автор: bredonosec
Дата сообщения: 22.10.2005 22:29
KapralBel
Значится, отличие новых версий ком.строки от доса.
Раньше низзя было. Сверился по ману.
Автор: KapralBel
Дата сообщения: 24.10.2005 10:41
bredonosec
Дык вопрос стоял про возможности винды, начиная с 2000 (судя по наличию папок $NT...$ )
Автор: Smitis
Дата сообщения: 25.10.2005 23:21
bredonosec

Цитата:
Чтоб удалить целиком - deltree [ключи, имена, трафаретные знаки]
//лень вспоминать синтаксис


deltree [/y] папка1[\] [папка2[\] ...]
Если путь заканчивать на \, то будет удалено содержимое папки, а сама она останется. Иначе папка будет удалена полностью.

deltree будет работать и под NT,2K,XP..., если её туда забросить (если кому нужна совместимоть батников для разных систем)
Автор: HWG
Дата сообщения: 26.10.2005 00:00
Подскажите как в батнике сделать: посчитать количество строк в файле и вывести это количество на экран? Можно конешно написать програмку на паскале например и проблемы не будет, но желательно обойтись без этого
Автор: igor_andreev
Дата сообщения: 26.10.2005 01:44
HWG
В батниках если юзать FOR, в конструкции типа:

Код: @ECHO OFF

SET /A COUNT=0
FOR /F %%A IN (TEST.TXT) DO SET /A COUNT+=1
ECHO Lines in TEST.TXT - %COUNT%

PAUSE
Автор: HWG
Дата сообщения: 26.10.2005 22:08
igor_andreev
Спасибо. Я делал похоже, но неправильно у меня вместо
SET /A COUNT+=1 было SET /A COUNT=%%A+1, поэтому результатом всегда было 2

Автор: HWG
Дата сообщения: 02.11.2005 08:49
Имеется файл с текстом вида

Цитата:
TEXT1 TEXT2 TEXT3
в результате работы батника к нему добавляются еще строки, необходимо удалить из всего файла TEXT1 (всегда одинаков) перед добавлением новой строки. Такое возможно средствами cmd файлов без дополнительных приблуд?
Автор: igor_andreev
Дата сообщения: 02.11.2005 09:20

Цитата:
Такое возможно средствами cmd файлов без дополнительных приблуд?

В этом топике смотри вопрос scup на седьмой странице. Команда FOR /F

3Ы: Ктоб не поленился , и шапку в топике сделал, с howto?
Автор: Da_Neil
Дата сообщения: 06.11.2005 22:43
Есть CUE-файлы, в которых есть такие строки:
Код: FILE "CDImage.ape" WAVE
Автор: igor_andreev
Дата сообщения: 06.11.2005 23:12

Цитата:
как перенаправить вывод egrep'a в команду if.

Может вывод egrep'a записать в файл? А в винде SET /P умеет брать значение переменной из файла.

Код:
@echo off
echo someword>file.tmp
set /p VAR=<file.tmp
del file.tmp
echo %VAR%
pause
Автор: Da_Neil
Дата сообщения: 07.11.2005 19:38
igor_andreev
Нашёл обходное решение, но оно как-то очень криво и непредсказуемо работает..
Вот текст скрипта:

Код: setlocal
FOR /F "usebackq delims=" %%f IN (`findstr /B "FILE " "%~1"`) DO (
SET cueline=%%f
echo %cueline%
set cuefile=%cueline:~6,-6%
echo %cuefile%
)
endlocal
pause
Автор: igor_andreev
Дата сообщения: 07.11.2005 23:03

Цитата:
Нашёл обходное решение

Это не обходное, это правильное, я сие и имел ввиду(из FOR /F выковыривать)

1. Если батнику передаешь параметр(в SendTo хочешь батник положить?), рекомендую писать не %~1, а %~s1 или %~fs1 или %~dpnxs1. Короткое имя файла *.cue то есть, винда все правильно передаст. И от лишних кавычек, и если в пути к файлу есть скобки, восклицательные знаки, апострофы и т.п. - от всего избавишься. А то дествительно временами неадекватно батник может себя вести.

2.
Цитата:
переменной присваивается значение, а в следующих строках идёт обработка, но! процессор как будто сразу же "забывает" её значение!

А ты хочешь в одном цикле DO присвоить значение переменной(cueline) и сразу же обкарнать по шесть знаков с каждой стороны этой переменной и присвоить второе значение еще одной переменной(cuefile). Это делается с включением ENABLEDELAYEDEXPANSION. У меня винда сейчас английская, не помню, как там в русской это называется, отложенные переменные чтоли
В общем тоже самое, только переменные пишутся не в знаках процента(%var%), а в восклицательных(!var!) и обрабатываются сразу. Не надо вызывать другую метку в батнике, обрабатывать там, возвращаться... Удобно в общем

Попробуй так:

Код:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

FOR /F "TOKENS=*" %%f IN ('FINDSTR /B "FILE " %~s1') DO (
SET cueline=%%f
ECHO !cueline!
SET cuefile=!cueline:~6,-6!
ECHO !cuefile!
)

ENDLOCAL
PAUSE
Автор: jeque
Дата сообщения: 11.11.2005 09:47
Подскажите, как в скрипте задать список масок файлов для их последующего копирования. Нашел одно решение, но оно мне не очень нравится.
Cкрипт называется copy_base.cmd и копирует в нужный каталог базы 1С.

Код:
@echo off
if /I exist F:\1c-buch\ goto :_menu
@echo.
@echo Ошибка! Скрипт необходимо запускать непосредственно на сервере.
goto :_end

:_menu
cls
@echo.
@echo ****************************************************************
@echo.
@echo 1. Сделать копию базы 1С Бухгалтерский
@echo 2. Сделать копию базы 1С Торговля
@echo 3. Сделать копию базы 1С Бухгалтерский учет 2
@echo 4. Выход
@echo.
@echo ****************************************************************
@echo.
@echo Введите 1,2,3 или 4 и нажмите ввод

set /p reply=
if /i "%reply%"=="1" goto :_buh
if /i "%reply%"=="2" goto :_predpr
if /i "%reply%"=="3" goto :_uc
if /i "%reply%"=="4" goto :_end
goto :_menu

:_buh
cls
set Dest=F:\1c-buh\copy\BUH
set Sour=F:\1c-buh\1cv77\Buid2004
set Prefix=buh-
@echo.
@echo Будет скопирована база 1С Бухгалтерский учет из папки %Sour% в папку %Dest%
@echo Внимание! Все пользватели должны выйти из программы 1С!
@echo Введите "y" для начала копирования или "n" для возврата в меню
@echo.
set /p reply=
if /i "%reply%"=="y" goto :_begin
goto :_menu

:_predpr
cls
set Dest=F:\1c-buh\copy\PREDPR
set Sour=F:\1c-Predpriyatie\1cv77\id2003
set Prefix=predpr-
@echo.
@echo Будет скопирована база 1С Торговля из папки %Sour% в папку %Dest%
@echo Внимание! Все пользватели должны выйти из программы 1С!
@echo Введите "y" для начала копирования или "n" для возврата в меню
@echo.
set /p reply=
if /i "%reply%"=="y" goto :_begin
goto :_menu

:_uc
cls
set Dest=F:\1c-buh\copy\UC
set Sour=F:\1c-uch_center\uch\UchCentr_DB_77\1SBDB
set Prefix=uc-
@echo.
@echo Будет скопирована база 1С Бухгалтерский учет из папки %Sour% в папку %Dest%
@echo Внимание! Все пользватели должны выйти из программы 1С!
@echo Введите "y" для начала копирования или "n" для возврата в меню
@echo.
set /p reply=
if /i "%reply%"=="y" goto :_begin
goto :_menu

:_begin

rem *.DBF
rem *.CDX
rem 1CV7.CFG*
rem 1CV7.MD*
rem 1CV7.DD*
rem 1CV7.SPL*
rem 1CV7.ORD*
rem *.SPL*
rem USRDEF\USERS.USR*

if /I not exist %Sour%\1SJOURN.DBF goto :_error
attrib -r %Sour%\1SJOURN.DBF
:_block
attrib +r %Sour%\1SJOURN.DBF
for /f "tokens=1,2 delims=:" %%i in ('attrib %Sour%\1SJOURN.DBF') do set temp_string=%%i
for /f "tokens=1,2,3,4,5,6 delims=ASHC " %%i in ('echo %temp_string%') do if /I NOT "%%i"=="R" goto :_block
for /f "tokens=1,2,3,4,5,6 delims=:./ " %%i in ('"date/t&&time/t"') do if "%%k"=="" (set t=%%i%%j) else set ymd=%%l%%k%%j
set place=%Dest%\%Prefix%%ymd%_%t%\
md %place%

for /f "tokens=1,2 delims= " %%i in (copy_base.cmd) do if "%%i"=="rem" "xcopy" %Sour%\%%j %place%%%j

attrib -r %Sour%\1SJOURN.DBF
goto :_end

:_error
@echo.
@echo С базой что-то не так. Не удалось найти файл 1SJOURN.DBF
goto :_end

:_end
@echo.
@echo Работа скрипта закончена.
@echo Нажмите любую клавишу.
@echo.
pause>nul
Автор: Smitis
Дата сообщения: 11.11.2005 14:41
jeque

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

а почему бы просто не написать:
copy /y *.dbf *.cdx и_т_д папка_куда
На крайний случай несколько команд copy и xcopy?
Автор: Da_Neil
Дата сообщения: 11.11.2005 16:57
igor_andreev

Цитата:
Короткое имя файла *.cue то есть, винда все правильно передаст.

У меня короткие имена отключены.


Цитата:
ENABLEDELAYEDEXPANSION

Спасибо за решение, с этим работает. Не подскажешь толковый ресурс по консоли Win, а то про этот ENABLEDELAYEDEXPANSION в справке информации практически ноль.


Цитата:
Там кстати в *.cue искомая строка всегда FILE<пробел>"имя файла"<пробел>WAVE ?

Не покатит, т.к. пробелы могут быть в имени файлов. Кстати, как приспособить кавычки разделителем? Оба варианта не работают:

Код: FOR /F "usebackq TOKENS=2 DELIMS=""
FOR /F "usebackq TOKENS=2 DELIMS=^""
Автор: igor_andreev
Дата сообщения: 13.11.2005 15:11

Цитата:
У меня короткие имена отключены.

Ну и зря. Один какой-то "умник", стопудово никогда батников не писавший, написал в свой статье-опусе, что для ускорения работы системы надо отключать создание коротких имен и все в инете как попки давай за ним повторять это на всех сайтах и другим голову морочить.
Со отключением времени последнего доступа к файлам на NTFS я еще согласен, но короткие имена - нафих-нафих. Имена файлов с символами типа &,!,%,+ и т.п. периодически встречаются и только работать честному командному файлу мешают

Цитата:
про этот ENABLEDELAYEDEXPANSION в справке информации практически ноль.

Да толком то и нету, по всему интернету примеры-инфу выискивать приходиться. Я попробую вкратце описать, чем удобно применение ENABLEDELAYEDEXPANSION. По идее этот топик совсем начинающие батникописатели тоже читают, мож им полегче будет. [more=Тыркайте_сюда]

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

Цитата:

0001. файл
0002. файл
0003. файл
0004. файл
0005. файл
0006. файл
0007. файл
0008. файл
0009. файл
0010. файл
0011. файл
0012. файл
0013. файл
... и так далее
0167. файл
0168. файл
...


Что первым делом делают? Ну наверное пытаются изобразить похожую конструкцию:

test_1.cmd

Код:
@ECHO OFF

SET FILECOUNT=0

FOR %%A IN (%windir%\system32\*.*) DO (
SET /A FILECOUNT+=1
IF %FILECOUNT% LSS 10000 SET COUNTER=%FILECOUNT%
IF %FILECOUNT% LSS 1000 SET COUNTER=0%FILECOUNT%
IF %FILECOUNT% LSS 100 SET COUNTER=00%FILECOUNT%
IF %FILECOUNT% LSS 10 SET COUNTER=000%FILECOUNT%
ECHO %COUNTER%. %%A>>TEST_1.TXT
)
Автор: Da_Neil
Дата сообщения: 13.11.2005 19:41
igor_andreev

Цитата:
Один какой-то "умник", стопудово никогда батников не писавший, написал в свой статье-опусе, что для ускорения работы системы надо отключать создание коротких имен и все в инете как попки давай за ним повторять это на всех сайтах и другим голову морочить.

Умник случаем не из Microsoft'a?


Цитата:
Имена файлов с символами типа &,!,%,+ и т.п. периодически встречаются и только работать честному командному файлу мешают

От прогресса не уйдёшь Нужно вырабатывать новые правила работы, а не делать всё по-старинке досовскими методами. Помню, какой-то сумасшедший админ всем советовал не держать ничего в папках с длинными именами, переименовать все системные папки и прочую досовскую ересь..


Цитата:
Да толком то и нету, по всему интернету примеры-инфу выискивать приходиться. Я попробую вкратце описать, чем удобно применение ENABLEDELAYEDEXPANSION. По идее этот топик совсем начинающие батникописатели тоже читают, мож им полегче будет. Тыркайте_сюда

За примеры спасибо, буду разбираться и копать..

Ещё заметил, что в составном операторе не работают ни обычные комментарии, ни нового типа ( :: ) — скрипт сразу вываливается с ошибкой и прекращает выполнение.

Кстати, создавать метку EOF необязательно. Можно использовать оператор GOTO :EOF
Автор: igor_andreev
Дата сообщения: 13.11.2005 21:18

Цитата:
Умник случаем не из Microsoft'a?

Угу, тамошний Сильно performance у тебя с отключением коротких имен повысился? Скажешь - комп летает. Дык он и у меня летает, и еще у кучи народа, не трогающих NtfsDisable8dot3NameCreation в реестре.

Цитата:
От прогресса не уйдёшь

Не в прогрессе дело, а в синтаксисе. Хоть ты кол на голове теши, а например "&" для комстроки - символ конца команды и начало следующей. И для Microsoft Command Shell 2005 года (MSH, которая пока в виде беты, но готовится на замену cmd.exe) - это тоже проблемка есть и будет. Буквально сегодня в MSH скормил wget-у ссылку, заканчивающуюся на
...Bezumie.(rus).Kinoshniki.&.ShareReactor.ru.avi , не обратил внимания, что там "&". Ну в ответ умная MSH сказала "Missing or invalid property reference or expression. At line:1 char:93". Не идут умники в майкрософт по пути прогресса

Цитата:
Нужно вырабатывать новые правила работы, а не делать всё по-старинке досовскими методами.

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

Цитата:
Помню, какой-то сумасшедший админ всем советовал не держать ничего в папках с длинными именами,

Я не админ, но тоже сумасшедший Мне больше нравятся unix-овские названия папок, типа /usr /bin /home. Просто нравятся и мне с такими удобнее.

Цитата:
составном операторе не работают ни обычные комментарии, ни нового типа ( :: )

Составной оператор - это что? А то я мало того, что не админ, еще и не программист Если внутри DO... имеешь ввиду, то REM точно работает, главное пустых строк не оставлять.

Цитата:
создавать метку EOF необязательно

Угу, по привычке написал. С таким же успехом я мог обозвать метку :END, :KANETZ_FAILA или еще как и тогда ее понадобилось бы создать. Батники просто быстро пишу, ни о чем особо не задумываясь.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879

Предыдущая тема: Problemi s zagruzkoy XP!


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