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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 - Позволяет превратить ваш батник в независимое приложение
· Пример - получение и обработка списка пользователей
 
 
Старая версия первого сообщения

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не, мне пока самому вряд ли составить.
Потому прошу помочь чисто в ознокомительных целях.
Мне не понятно как обозначить "любая папка" в текущей папке

Всего записей: 15 | Зарегистр. 16-10-2007 | Отправлено: 14:54 19-10-2007
KapralBel



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

Код:
@Echo Off
FOR /R e:\Work\HomeComp %%a in (.) Do Copy %0 "%%a"

А теперь внимательно почитай FOR /? и мой код

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 15:05 19-10-2007
KosarKosta

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Аааа, Понятно.
Т.е. если в наборе точка, то в качестве переменных будут выступать папки.
Уже немного начинаю врубаться в циклы.
Спасибо, я почитал и вот сам составил полезный батник (давно мечтал)
Он сортирут по папкам файлы по расширениям (помню целую неделю сортировал руками).
НО, его недостаток в том, что если он копирует одинаковый файл, то он его перезаписывает. Т.е. в папке оказывается последний скопированный повторный файл.
Помогите дописать (или составить другую), чтобы в скопированной папке оставался только файлы с более поздней (новой) датой.
Так решится 2-я проблема с повторяющимися файлами.
 
@echo off
md _DOC
md _TXT
md _FILMS
md _CHM
md _DJVU
md _INTERNET
md _PICS
md _PDF
md _ARCH
md _SOUND
md _TEMP
For /R %%a in (*.doc;*.rtf) do copy %%a \_DOC
For /R %%a in (*.txt) do copy %%a \_TXT
For /R %%a in (*.chm) do copy %%a \_CHM
For /R %%a in (*.djvu) do copy %%a \_DJVU
For /R %%a in (*.htm;*.jhtml;*.mht;*.php;*.php3;*.phtm;*.sht;*.shtm;*.url;*.xml) do copy %%a \_INTERNET
For /R %%a in (*.bmp;*.gif;*.ico;*img;*.jpg;*.jpeg;*.pcx;*.pic;*.png;*.tif;*.tiff) do copy %%a \_PICS
For /R %%a in (*.pdf) do move %%a \_PDF
For /R %%a in (*.7z;*.ace;*.arj;*.gz;*.jar;*.pk3;*.r0?;*.rar;*.tar;*.zip) do copy %%a \_ARCH
For /R %%a in (*.cda;*.med;*.mid;*.midi;*.mp3;*.ogg;*.wav;*.wma) do copy %%a \_SOUND
For /R %%a in (~*.*;*.~~~;$*.*;*.$??;*.bak;*.log;*.old;*.org;*.pk;*.swp;*.tmp;*.temp;*.wbk) do copy %%a \_TEMP
For /R %%a in (*.avi;*.divx;*.mpe*;*.mpg;*.mpg4;*.mov;*.vob;*.wmv) do copy %%a \_FILMS
 
Я на всякий случай написал COPY, а не MOVE, п-ч удалить можно всегда.

Всего записей: 15 | Зарегистр. 16-10-2007 | Отправлено: 18:36 19-10-2007
Elroir



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

Цитата:
чтобы в скопированной папке оставался только файлы с более поздней (новой) датой

Вместо copy, используй xcopy с ключами "/D /Y".
Смотри "xcopy /?".

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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 19:39 19-10-2007
alers

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
можно ли с помощью бат файла удалить n-ое количество строк из txt файла ? нужно из логов каждый день удалять примерно по 100 строк)

Всего записей: 14 | Зарегистр. 09-07-2007 | Отправлено: 07:43 25-10-2007 | Исправлено: alers, 07:45 25-10-2007
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
alers
Где удалить ?
В начале или в конце?
В начале - очень легко
 
FOR /F "skip=100 delims=" %%a in (1.txt) Do Echo %%a>2.txt

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 09:44 25-10-2007
kalkin5



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
подскажите как сделать:
нужно через if проверить существование папки (c:\Documents and Settings\All Users\Главное меню\Программы), если есть то ... если нет перейти к след пункту
конкретный пример нужно положить ярлык в меню пуск - программы, но сложность в том что дома англ версия винды, а на работе русская

Всего записей: 189 | Зарегистр. 21-03-2006 | Отправлено: 13:41 25-10-2007
Elroir



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

Код:
 
if exist "c:\Documents and Settings\All Users\Главное меню\Программы\nul"  (...) else (...)
 

Если будут проблемы с русской кодировкой, то надо либо набирать в редакторе, который сразу дает возможность писать в DOS кодировке, либо поставить первой строчкой в батнике "chcp 1251>nul"

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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:50 25-10-2007
Smitis



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

Цитата:
if exist "c:\Documents and Settings\All Users\Главное меню\Программы\nul"  (...) else (...)  

Это ты погорячился. Так не работает. Т.е. работает, но только для коротких имён.

----------
Разум когда-нибудь победит

Всего записей: 3453 | Зарегистр. 09-02-2003 | Отправлено: 17:20 25-10-2007
Elroir



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

Цитата:
Это ты погорячился. Так не работает. Т.е. работает, но только для коротких имён.

Черт! Прав, конечно.
 
kalkin5
Ну тогда так:

Код:
 
@echo off
for /f "tokens=*" %%a in ("c:\Documents and Settings\All Users\Главное меню\Программы") do (
if exist %%~sa\nul (...) esle (...)
)
 



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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 17:47 25-10-2007 | Исправлено: Elroir, 17:48 25-10-2007
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Elroir
Лучше так (пример):

Код:
 
@echo off
call :direxist "C:\Program Files\Windows Media Player"
if errorlevel 1  echo OK!
if not errorlevel 1  echo NO!
call :direxist "C:\Program Files\Windows Media Player\mplayer2.exe"
if errorlevel 1  echo OK!
if not errorlevel 1  echo NO!
 
goto:eof
:direxist
setlocal
set a=%~a1
set b=%a:d=%
if %a% == %b%  exit/b
exit/b 1
 

По атрибутам
 


----------
Разум когда-нибудь победит

Всего записей: 3453 | Зарегистр. 09-02-2003 | Отправлено: 17:49 25-10-2007 | Исправлено: Smitis, 17:50 25-10-2007
Maza Faka



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

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 19:09 25-10-2007 | Исправлено: Maza Faka, 19:10 25-10-2007
igor_andreev

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

Цитата:
Т.е. работает, но только для коротких имён.

Можно путь к папке с пробелами заключать в кавычки и после кавычек ставить обратный слэш(без NUL)

Код:

if exist C:\TEST\NUL echo OK!
if exist "C:\Program Files\Windows Media Player"\ echo OK!

Эт я какой-то батник для Win 2000 писал - случайно обнаружил

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 00:46 26-10-2007 | Исправлено: igor_andreev, 00:54 26-10-2007
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
igor_andreev
Неплохо
Только обратный слешь можно и внутри кавычек ставить.

----------
Разум когда-нибудь победит

Всего записей: 3453 | Зарегистр. 09-02-2003 | Отправлено: 15:04 26-10-2007
kalkin5



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
всем спасибо, кто откликнулся
 
всегда хотелось узнать можно ли с помощью bat файла создать ярлык к файлу,
если можно на примере пож-та:
Файл:            %ProgramFiles%\TC_EX\totalcmd.exe
Аргументы:        /I=".\Profiles\work\wincmd.ini" /F=".\Profiles\work\wcx_ftp.ini
Рабочий каталог:    %programfiles%\TC_EX
Горячая клавиша:    Нет
Окно:            Обычный размер
Путь к иконке:    %ProgramFiles%\TC_EX\ICO\commander\tc_red.ico
            номер значка: 0

Всего записей: 189 | Зарегистр. 21-03-2006 | Отправлено: 18:54 27-10-2007
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kalkin5
Встроенными средствами нельзя. Если воспользоваться утилитой nircmd, то можно так:

Код:
 
@echo off
nircmdc shortcut "%%ProgramFiles%%\TC_EX\totalcmd.exe" ".\" "TotalCommander" "/I=".\Profiles\work\wincmd.ini" /F=".\Profiles\work\wcx_ftp.ini"" "%%ProgramFiles%%\TC_EX\ICO\commander\tc_red.ico" "0"
 

Это все одна строка.

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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 22:37 27-10-2007
Tipulatoid



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Можно ли заставить команду echo писать в два файла одновременно? Что-то вроде
Код:
echo test >1.txt >2.txt
Чтобы образовались 1.txt и 2.txt с одинаковым текстом?

Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 23:11 27-10-2007
Elroir



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

Цитата:
Можно ли заставить команду echo писать в два файла одновременно?

Встроенными средствами нельзя. (Ну только если два раза запустить )
Есть утилита mtee, которая перенаправляет входной поток в любое количество файлов:

Код:
 
echo test | mtee 1.txt 2.txt
 


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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 00:01 28-10-2007
Tipulatoid



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Elroir
Спасибо. Еще вопрос:
В реестре у меня по пути HKCU\Software\RIT\The Bat! есть параметр Working Directory со значением %APPDATA%\The Bat!\ Такой вот код
Код:
@echo off
setlocal enabledelayedexpansion
 
set foundbat=no
reg query "HKCU\Software\RIT\The Bat^!" /s > nul && set foundbat=yes
 
if /i %foundbat%==no (
   echo 
   echo.
   echo Не удалось обнаружить почтовый клиент The Bat в системе. Чтобы далее  
   echo использовать преимущества AutoSend^&Get, вам нужно установить The Bat.
   echo Дальнейшая работа AutoSend^&Get на данный момент невозможна.
   echo.
   goto end
) else (
  for /f "tokens=3*" %%a in ('reg query "HKCU\Software\RIT\The Bat^!" /v "EXE path"') do set mailclient=%%b
  for /f "tokens=3*" %%a in ('reg query "HKCU\Software\RIT\The Bat^!" /v "Working Directory"') do set mailworkdir=%%b  
)
 
echo %mailclient%
echo %mailworkdir%
 
:end
echo End

 
записывает в переменную %mailworkdir% значение %APPDATA%\The Bat!\ . Мне его нужно развернуть до C:\Documents and Settings\Admin\Application Data\The Bat!. Т.е. нужно получить переменную %var%, чтобы по команде cd %var% батник без проблем переходил бы в нужный каталог. Обращу внимание, что в пути есть восклицательный знак, а от команды setlocal enabledelayedexpansion я отказаться не могу.

Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 02:35 28-10-2007
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Tipulatoid
Да.... Задачка получилась нетривиальная.
Целый час на нее убил
Вот, что получилось:

Код:
 
@echo off  
setlocal enabledelayedexpansion  
 
call :try
 
for /f "tokens=*" %%c in ('echo !mailworkdir!') do set "test=%%c"
echo !test!
 
goto :EOF  
 
:try
setlocal disabledelayedexpansion
for /f "tokens=3*" %%a in ('reg query "HKCU\Software\RIT\The Bat!" /v "Working Directory"') do set "mailworkdir=%%b"
set "mailworkdir=%mailworkdir:!=^^^^^!%"
endlocal & set "mailworkdir=%mailworkdir%"
 


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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 02:30 28-10-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.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru