Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)

Модерирует : gyra, Maz

Widok (19-11-2007 12:08): лимит страниц. продолжаем здесь  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118

   

KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Командная строка, батники\сценарии (bat, cmd)
Вопросы, задачи и их решения по работе с командной строкой, файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Microsoft Windows » Задачи на bat-файлах 4
 
Полезные ссылки:
· Cmd. Описание от разработчиков
· Урок bat-аники (для начинающих)
· Набор GNU утилит для win32
· Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· cmdow — изменение параметров и видимости дос-окна
· blat — отправка почты из консоли
· Справка по командам в виде Html
· Команды RunDll32
· Quick Batch File Compiler - Позволяет превратить ваш батник в независимое приложение
· Пример - получение и обработка списка пользователей
 
 
Старая версия первого сообщения

Всего записей: 9736 | Зарегистр. 12-10-2001 | Отправлено: 04:28 24-09-2002 | Исправлено: Elroir, 19:35 11-09-2007
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
freeminded

Код:
@Echo Off
D:
CD D:\1CBase
dir /o:-n /b *.rar>delete.lst
For /F "skip=4" %%a in (delete.lst) Do Echo Del %%a /q

 

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 16:29 01-08-2007
freeminded

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Код:@Echo Off  
D:  
CD D:\1CBase  
dir /o:-n /b *.rar>delete.lst  
For /F "skip=4" %%a in (delete.lst) Do Echo Del %%a /q  

 
 
Спасибо.
Вижу - сначала по команде Dir формируется текстовый документ c отсортироваными файлами, а потом for пропускает 4 первых файла и убивает все лишнее.... интересно...
даже говорит, что удалено! прикольно.
 
А если файлов < 4, например 2, что тогда?
 
Добавлено:
Дык надо было сразу искать спец.софт, а не просить решить проблему  

Цитата:
 Цитата:"своими руками"  

 
Тема ведь посвящается bat`анике? Если бы у меня было время, я бы батником сделал, все, но так как я все должен был сделать все за день, и при начальном уровне знания WHS равным 0, пришлось воспользоватся резервным вариантом

Всего записей: 14 | Зарегистр. 02-06-2007 | Отправлено: 11:19 02-08-2007
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
freeminded
1. Он только рапортует, а не удаляет - удали слово Echo
2. Обычно архивную копию делаю каждый день, вот из этого я и исходил
3. Допустим архивная копия не сделалась в какой-то день, напрмер
01.08 -есть
02.08 - нет
03.08 - есть
04.08 - есть
05.08 - есть пытаемся удалить лишние  
их только 3, а не 4 значит не удаляем
если 6-го все делается правильно - то удаляется за 1-е число
 
Таким образом у тебя архивные копии не за последних 4 дня хранятся, а последних 4 архивных копии. что в случае всяких неудач все таки лучше чем 0 архивных копий
 
Добавлено:

Цитата:
Тема ведь посвящается bat`анике? Если бы у меня было время, я бы батником сделал, все, но так как я все должен был сделать все за день, и при начальном уровне знания WHS равным 0

Вообще имелось в виду не другие скриптовые языки, а всяческие утилиты
Потому что сам язык встроенного командного интерпретатора - достаточно ограничен, и сложные вещи (твоя задача к ним не относится) на нем если можно сделать - то с такими извратами - что работать будет достаточно долго
Кстати я бы порекомендовал не WSH а PowerShell - M$ планирует перейти на него
 
Кстати задача найти дату отличающуюся от нужной на N дней там решается весьма просто

Код:
PS D:\> $CurrentDate=Date
PS D:\> $LastDate=$CurrentDate.AddDays(-138)
PS D:\> $CurrentDate
 
2 августа 2007 г. 10:32:32
 
PS D:\> $LastDate
 
17 марта 2007 г. 10:32:32
PS D:\>

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 11:27 02-08-2007 | Исправлено: KapralBel, 11:42 02-08-2007
mvg1952



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемые, ибн ГУРУ, вопрос от неофита: какое есть ограничение на количество строк, команд в BAT файле?  
( поиск не помог, а былой опыт уже и подзабыл, когда натыкался на ето)

Всего записей: 38 | Зарегистр. 20-10-2006 | Отправлено: 11:42 02-08-2007
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
mvg1952
Что-то я ни разу не нарывался на ограничение
Хотя батнички у меня по объему - огого
Но если (если) что... то выноси часть кода в другой батник и делай команды

Код:
 
Call Part1.cmd
Call Part2.cmd
Call Part3.cmd
Call Part4.cmd
 

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 11:45 02-08-2007
mvg1952



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
Спасибо, так и сделаю

Всего записей: 38 | Зарегистр. 20-10-2006 | Отправлено: 11:56 02-08-2007
Maza Faka



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
freeminded

Цитата:
Тема ведь посвящается bat`анике?

Дык, а я на чём написал? На Delfi, что ли?
 

Цитата:
Если бы у меня было время, я бы батником сделал

У меня тоже мало лишнего времени, но я его нашёл, что бы помочь тебе решить задачу.
 

Цитата:
при начальном уровне знания WHS равным 0

Где в моём коде ты увидел WSH? И неужели требуется так много знаний что бы в консоли выполнить forfiles /?
 

Цитата:
пришлось воспользоватся резервным вариантом

А чем конкретно не устроил мой вариант?

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 15:01 02-08-2007 | Исправлено: Maza Faka, 15:04 02-08-2007
Stanley_Tweedle



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maza Faka
 
Твой способ решения с forfiles самый лучший и наглядный!
Читая вашу ветку переписал все скрипты на использование forfiles.
Более простого и наглядного способа без использования сторонних программ думаю просто нет

Всего записей: 4 | Зарегистр. 29-07-2007 | Отправлено: 19:03 02-08-2007
dardreams



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
@echo off  
setlocal enabledelayedexpansion  
for /f "tokens=*" %%a in (file.txt) do (  
set "count=0"  
set "text=%%a"  
call :show  
)  
goto :EOF  
:show  
if "!text:~%count%,1!"=="" (goto :EOF)  
echo !text:~%count%,1!  
set /a "count+=1"  
goto show

Спасибо за это. Для меня слишкком сложно чтобы понять что тут и как. Можно попросить еще чтобы . если в файле слово начинается с новой строки, чтобы выводил хотя бы какаойнить символ напирмер:
 
------------------------------
qwe
asd
cxz
sdf
qwe
------------------------------
 
и вывод был такой  
 
qwe_asd_cxz_sdf_qwe
 
Добавлено:
огромное спасибо. Сам смог разобраться !!!
 
Добавлено:
А почему он пробелы не выводит ?

Цитата:
@echo off  
setlocal enabledelayedexpansion  
for /f "tokens=*" %%a in (file.txt) do (  
set "count=0"  
set "text=%%a"  
call :show  
)  
goto :EOF  
:show  
if "!text:~%count%,1!"=="" (goto :EOF)  
echo !text:~%count%,1!  
set /a "count+=1"  
goto show


Всего записей: 99 | Зарегистр. 29-05-2007 | Отправлено: 10:09 03-08-2007
Maza Faka



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dardreams

Цитата:
А почему он пробелы не выводит ?

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

Код:
 
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in (file.txt) do call :sub "%%a"
pause
goto :eof
 
:sub
set str=%~1
for /l %%b in (0,1,254) do if not "!str:~%%b,1!" equ "" (echo. !str:~%%b,1!)
 

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 11:38 03-08-2007
Yuki2003



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Проблема вылезла - в именах каталогов встречаются символы & и ! (и может еще - какие?). Как бы это "обойти"?

Всего записей: 1077 | Зарегистр. 10-07-2003 | Отправлено: 14:18 03-08-2007
Maza Faka



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Yuki2003

Цитата:
Проблема вылезла

Поподробней пожалуйста, что конкретно нужно сделать?

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 14:29 03-08-2007
Yuki2003



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maza Faka
Все тот же скрипт доделываю.
List.txt:

Цитата:
C:\!yy\*
C:\&yy\*

Backup.bat:

Код:
For /f "tokens=2*" %%a In (
'reg query HKLM\SOFTWARE\7-Zip /v Path 2^>nul ^| Findstr /i Path'
) Do Set backup="%%b\7z.exe"
If Not Defined backup Echo Файловый архиватор 7-Zip не установлен>> "!archDate! errors.txt" & GoTo :eof
 
For /f "delims=" %%c In (List.txt) Do (
Set data=%%c
Set count=0
Call :GetCount "%%c"
!backup! u "Backup !archName!.7z" "!data!" -up1q0r2x2y2z1w2 -mx9 -ms=off>> "log.txt" 2>&1)
Goto :eof
 
:GetCount
Set archName=%~1
 
:Again
For /f "delims=\* tokens=1*" %%d In ("!archName!") Do (
Set /a count+=1
Set archName=%%e)
If Not "!archName!"=="" GoTo Again
For /f "delims=\ tokens=%count%" %%f In ("%data%") Do Set archName=%%f
Goto :eof

 
Добавлено:
Не будет работать, потому что в List.tx в именах каталогов символы & и !

Всего записей: 1077 | Зарегистр. 10-07-2003 | Отправлено: 14:45 03-08-2007
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Yuki2003
А самый простой способ - переименовать эти папки?

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 14:49 03-08-2007
Yuki2003



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
Это каталоги на серверах с неизвестным заранее местонахождением, так как невозможно запретить юзерам создавать их. Насчет переименовать итоговое имя архива - возможно, но если заменять на 1 символ (например _) то каталоги из приведенного примера запакуются в один архив, да и хотелось бы обойтись без переименования.

Всего записей: 1077 | Зарегистр. 10-07-2003 | Отправлено: 14:52 03-08-2007 | Исправлено: Yuki2003, 14:53 03-08-2007
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Yuki2003
На какой команде проявляется ошибка с "&" и "!"?

----------
"В интернете есть все, но не всегда"

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 14:53 03-08-2007
Yuki2003



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Стоп.
Взял в кавычки, так:
Set archName="%~1"
Сообщение об ошибке нет, но и архива нет.
Добавил после:
Echo !archName!
Получил:
"C:\yy\*"
"C:\&yy\*"
Вместо:
"C:\!yy\*"
"C:\&yy\*"
 
Добавлено:
еще тут добавил кавычки - Set archName="%%e"
разбираюсь...
 
Добавлено:
Поправил кавычки - проблема с символом & отпала.
Осталась проблема с символом !.
For /f "delims=" %%c In (List.txt) Do (  
Set data=%%c
echo %%c
- дает С:\yy\* вместо С:\!yy\*
 
То есть еще на этапе чтения из List.txt проблема.

Всего записей: 1077 | Зарегистр. 10-07-2003 | Отправлено: 15:02 03-08-2007
vserd

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Yuki2003

Цитата:
For /f "delims=" %%c In (List.txt) Do (  
Set data=%%c  
echo %%c  
)

на твоем примере у меня дает  
C:\!yy\*
C:\&yy\*
 
 
И попробуй поиграться с заменой ! на ^! т.е. маскировкой символов.
Надеюсь это ты проштудировал http://forum.ru-board.com/topic.cgi?forum=62&topic=10650&start=0&limit=1&m=6#1
на предемет передачи/замены & ?

Всего записей: 2062 | Зарегистр. 08-05-2002 | Отправлено: 15:36 03-08-2007
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Yuki2003
Единственный вариант, который я вижу - не использовать "setlocal enabledelayedexpansion" и, соответственно, конструкции вроде !переменная!.
То есть примерно так:

Код:
 
For /f "tokens=2*" %%a In (  
'reg query HKLM\SOFTWARE\7-Zip /v Path 2^>nul ^| Findstr /i Path'  
) Do Set "backup="%%b\7z.exe""  
If Not Defined backup Echo Файловый архиватор 7-Zip не установлен>> "%archDate% errors.txt" & GoTo :eof  
 
For /f "delims=" %%c In (List.txt) Do (  
Set "data=%%c"
Set "count=0"
Call :GetCount "%%c"
call :Process
)  
Goto :eof  
 
:Process
%backup% u "Backup %archName%.7z" "%data%" -up1q0r2x2y2z1w2 -mx9 -ms=off>> "log.txt" 2>&1
goto :EOF

 
:GetCount  
Set "archName=%~1"
 
:Again  
For /f "delims=\* tokens=1*" %%d In ("%archName%") Do (  
Set /a "count+=1"
Set "archName=%%e")
If Not "%archName%"=="" GoTo Again
For /f "delims=\ tokens=%count%" %%f In ("%data%") Do Set "archName=%%f"
Goto :eof
 

Я не тестировал код - проверяй.

----------
"В интернете есть все, но не всегда"

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 15:44 03-08-2007
Yuki2003



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
vserd
на твоем примере у меня дает  
C:\!yy\*

чудеса даже не знаю, может версия cmd разная... У меня от xp sp2.

Цитата:
vserd
Надеюсь это ты проштудировал

Спасибо, смотрю...

Всего записей: 1077 | Зарегистр. 10-07-2003 | Отправлено: 15:44 03-08-2007
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)
Widok (19-11-2007 12:08): лимит страниц. продолжаем здесь


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru