Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Windows > Как написать BAT файл?


Автор: bel_nikita 2.6.2004, 11:20
Может есть ссылочка про написание BAT файлов?
Какие команды в MS-DOS есть?
не помню уж... давно это былоsmile.gif

Нужно по условию выполнить копирование файлов.

Автор: Akina 2.6.2004, 12:19
http://rusdoc.df.ru/reviews/os/msdos/

Цитата
Нужно по условию выполнить копирование файлов.

по КАКОМУ условию? не все условия можно проверить в батче - придется пользовать скрипт (в ДОС-сеансе) или доп. программу - в чистом ДОСе.

Автор: Fish 2.6.2004, 12:19
if <условие> copy FILE1 FILE2

Автор: Akina 2.6.2004, 12:20
Fish
фига...

if <условие> do copy FILE1 FILE2

Автор: boevik 2.6.2004, 12:27
Как вариант, использовать VBScript вместо батника DOS.

Автор: Fish 2.6.2004, 12:39
Akina
Причём здесь do???

Автор: Akina 2.6.2004, 13:40
Fish
при том что только начиная с версии 6.0 DO перестало быть необходимым. До того было либо if ..... do команда, либо if ..... goto метка. А автор версии ДОСа не указал...

Автор: Fish 2.6.2004, 14:07
smile.gif Ладно. Автору темы наверное все версии пригодятся.

Автор: bel_nikita 2.6.2004, 15:42
запарился MS-DOS вспоминатьsmile.gif
Могу я сделать типа условия?:
А=1
if <A=1> copy ...
else copy...


Т.е. типа перемнную ввести.
Ситуация такая: Есть два файла. нужно скопировать один - нужный. Какой имеено должен выбрать пользователь. Заводить это дело на клавишу - не катит. Хотелось бы, чтоб юзер изменил переменную в батнике. А потом запустил батник.
Почему мне так надо? Долго пояснять. Но надо.

Автор: Akina 2.6.2004, 16:09
[copyfile.bat]
Код
if "%1" == "1" do copy file1.ext destinat.ext
goto done
if "%1" == "2" do copy file2.ext destinat.ext
goto done
echo Запуск: CopyFile [1|2]
echo Нажми чо-нить для выхода
pause>nul
:done

Автор: boevik 2.6.2004, 16:11
Не уверен, что в BAT можно объявлять переменные и делать простой IF.

Если надо запускать под виндой, но не хочется писать прогу, то можно воспользоваться vbscript.

Вот к примеру код:
Код
a=1
if a=1 then
  Set FSO = CreateObject("Scripting.FileSystemObject")
  fso.copyfile "c:\1.html", "c:\temp\1.html"
end if
MsgBox "Finish"


Сохранить код в файл с окончанием vbs. Кликнуть по нему два раза и будет работать.

Автор: bel_nikita 2.6.2004, 16:30
Akina
не понял:
Цитата
if "%1" == "1"

что это за условие?

Автор: Akina 2.6.2004, 16:38
bel_nikita
Цитата
что это за условие?


Знаешь что такое параметры командной строки? так вот - это проверка того что при запуске батча в качестве первого параметра ему передана единица. Т.е. было запущено

CopyFile 1

а не

CopyFile 2

или там

CopyFile 3 2 1

Автор: Fish 3.6.2004, 08:47
Цитата
Ситуация такая: Есть два файла. нужно скопировать один - нужный. Какой имеено должен выбрать пользователь. Заводить это дело на клавишу - не катит. Хотелось бы, чтоб юзер изменил переменную в батнике. А потом запустил батник.

Могу посоветовать самый лёгкий путь, если тебе понравиться.
Пускай юзер ставит REM перед той командой копирования которая ему не нужна.
Код

copy FILE1 FILE
REM copy FILE2 FILE

Автор: Guest 8.8.2004, 22:38
Как писать bat файлы в DoS е???? qstn.gif

Автор: S.A.P. 8.8.2004, 22:55
Переменные в BAT е можно обьявлять переменные, кажется так:
set var=1

Автор: December 8.8.2004, 22:58
copy con myfile.bat
smile.gif

Автор: Guest 8.1.2005, 10:18
сам хочу узнать smile

Автор: Druidik25 28.1.2005, 17:37
Чтобы написать бат файл в досе нужно написать
copy con имя_файла.bat
Писать текст самого файла
В конце файла нажать Ctrl+Z и Enter
Будет создан файл. Либо пользуясь какой нить оболочкой аля VC и Shift+F4 и писать.
Команды доса перечисляются по порядку одна за одной. Можно использовать if, goto, pause, echo ... ...
Команд не так много, но пользуясь ими можно описать многое.

Автор: Gigabyte 1.2.2005, 13:57
Попробуй найти книгу "IBM PC для пользователей" В. Фигурнов.
Вообще в bat файлах можно сдылоть достаточно много вещей
даже вирус, форматирующий винт
если надо то пришлю код

Автор: MVA77 10.11.2005, 18:38
Подскажите плиз.

В ДОСе нужно реализовать такую вещь: при загрузке создается каталог с именем текущей даты, туды копируются файлы. При повторной загрузке проверка каталога с этим именем, если он есть - копирование отменяется.
очень нужно - ежедневное резервирование файлов - backup.bat
smile

Автор: Beliar 4.4.2008, 15:24
Подскажите плиз. Нужно написать батник который копировал бы файлик из одной папки локального компьютера в папку на сервере. К примеру так copy C:\Program Files\Alwil Software\Avast4\DATA\400.vps \\euroserv\ForAll\Base\ но дело в том что DOS не понимает виндового значения \\ а я в свою очередь не знаю как заставить его подконектиться и записать в папку файл. Может кто подсказать как это сделать?

Автор: Beliar 4.4.2008, 16:17
Эту задачу я решил copy /y "C:\Program Files\Alwil Software\Avast4\DATA\400.vps" \\euroserv\ForAll\Base\. но появилось другая задача, Теперь мне надо забрать с сервера этот файл Я сделал так copy /y "\\euroserv\ForAll\Base\400.vps" C:\Program Files\Alwil Software\Avast4\DATA\ и мне выдает ошибку не правильный синтаксис, в чем может быть проблема?

Автор: Infector 4.4.2008, 22:39
Есть еще вариант, подходит и для классического ДОСа и для командной строки в NT:

подключаешь нару сетевым диском. Можно правым щелчком на "мой компутер", можно командой

net use z: \\euroserv\ForAll

потом работаешь как с обычным диском

copy z:\Base\400.vps C:\Program Files\Alwil Software\Avast4\DATA\ /q

если надо отключить шару от диска:

net use z: /delete

Автор: malor 3.9.2008, 11:37
Мне нужно чтоб мой bat-файл(назовем его - MyBatFile.bat и пропишем в списке путей поиска у windows PATH ) выполнял  запуск моей проги MyProga.exe в рамках того каталога где я нахожусь. Пример:
Есть каталоги - 
c:\common\dir1\
c:\common\dir2\
c:\common\dir3\


в каждом из них лежит моя прога MyProga.exe. Допустим я сижу в  папке c:\common\dir2\NekayaPapka и запускаю из нее MyBatFile.bat. В этом случае он должен запустить на выполнение  c:\common\dir2\MyProga.exe. В случае если б я находился в  c:\common\dir3 он должен был бы запустить c:\common\dir3\MyProga.exe.

Можете наброску сделать такого bat'a ? (или сказать какой командой DOS мне воспользоваться для извлечения путей).

Автор: Данкинг 3.9.2008, 12:06
Если у тебя .bat в той же папке, то зачем вообще указывать путь? Вроде как можно просто написать MyProga.exe.

Автор: malor 3.9.2008, 12:18
Цитата(Данкинг @ 3.9.2008,  12:06)
Если у тебя .bat в той же папке, то зачем вообще указывать путь? Вроде как можно просто написать MyProga.exe.

Кроме строки "...и запускаю из нее MyBatFile.bat. "  в моем сообщении есть еще строка:
"...пропишем в списке путей поиска у windows PATH "
Т.е. Bat-файл будет где-то лежать в одном надежном месте.

Автор: Mayk 3.9.2008, 12:21
Цитата(malor @  3.9.2008,  15:37 Найти цитируемый пост)

Можете наброску сделать такого bat'a ? (или сказать какой командой DOS мне воспользоваться для извлечения путей).

Способ в лоб - использовать %CD%, подстроки аля %CD~0,-2%(help set) и if

Добавлено @ 12:27
Код

if /i "%CD:~0,16%" == "c:\program files" echo program
if /i "%CD:~0,10%" == "c:\windows" echo "winda"

если запустить из c:\program files\far выдасть program
если запустить из c:\windows выдаст winda.

обращаю внимание на то что из c:\windows555 он тоже выдаст винда. оставляю данный баг на откуп читателям

Добавлено @ 12:28
PS. это работает в батниках win xp.  про другие не знаю. help if, help set решают

Автор: 01MDM 3.9.2008, 14:05
Цитата

PS. это работает в батниках win xp.  про другие не знаю.


В dose это не прокатит  smile  Там нет `if /i`, а так же нельзя обрабатывать переменные ( %var:....%). И cкорее всего нет переменной %cd%

Много готовых решений именно для DOS Batch: 
http://home7.inet.tele.dk/batfiles/batfiles.htm

Автор: Wergel 5.3.2009, 11:56
Подниму старую тему smile
Нужен bat-ник который бы соединялся по сетевому пути к логу(который постоянно пишется) и с момента запуска данного bat-ника считывал все что пишется в этот момент в лог в отдельный файл определенный пользователем(например fragment.log). И этот файл(fragment.log) в который записывается результат должен храниться на локальной машине. Остановка работы bat-ника завершает запись в файл fragment.log 

смысл всего идентичен команде tail -f на Unix:
Код

[logur2l@l6 log]$ tail -f server.log >fragment.log

Которая завершается по нажатию CTRL+C

Помогите написать? или поможет у кого есть уже готовый.

Автор: Thinker 5.3.2009, 12:19
tail -f - выводит последние 10 строк, затем на 10 секунд деактивизируется, после чего считывает файл снова. 
А программа Wintail не подойдет или только bat?

Автор: Wergel 5.3.2009, 13:54
неее... нужно воспрользоваться стандартными средствами Windows, без использования стороннего ПО

Автор: Akina 5.3.2009, 14:17
Тогда твоя задача нерешаема, походу.

Автор: Wergel 5.3.2009, 17:51
не бывает ни чего невыполнимого

Автор: Thinker 5.3.2009, 22:15
Цитата(Wergel @  5.3.2009,  18:51 Найти цитируемый пост)
не бывает ни чего невыполнимого 

Как вариант. Пишем цикл проверки количества строк с занесением в файл 2. Потом сравниваем количество строк в 2 и с первоначально созданным 1. Если есть разница, то отсчитываем разницу снизу и пишем в файл lod_local.txt .

Вот только не могу решиться, писать или нет... Оно того не стоит. Это извращение. 
Wergel, может на чем другом напишем? 

Автор: Wergel 6.3.2009, 10:23
отсчитывать с низу это извращение smile лог с низу пишется постоянно, да и он пишется с такой скоростью что считывать построчно наверное не получится.  можно и на чем-то другом написать... наверное если оно не будет устанавливаться

Автор: Thinker 6.3.2009, 11:22
Wergel, а что же ты тогда мозг подрываешь, что батник нужен??? Не мог тему создать "Помогите удаленно получать содержимое логфайла!"????

Автор: vhacker 7.11.2009, 18:27
Модератор: Сообщение скрыто.

Автор: mihanik 7.11.2009, 20:06
Цитата(vhacker @  7.11.2009,  18:27 Найти цитируемый пост)
Дайте кто нибудь ссылку на бат словарь по написанию вирусов,очень надо,ПЛИЗ! 


 smile 

Вирусы не обсуждаются.
Отправил рапорт модератору!

Автор: December 7.11.2009, 23:16
vhacker, в силу первого раза предупреждение ставить не буду, но, думаю, суть ты понял.

Автор: Hunterr101 28.11.2009, 14:04
помогите плз нужна прога или батник...

чтоб при вставлении флэшки в комп определённая папка покировалась на неё в фоновом режиме(чтоб небыло видно окна копирования)

оч нада плз

Автор: 01MDM 28.11.2009, 15:23
Hunterr101, 
Многое зависит от настроек компьютера. Если авторан отключен, то ничего не получится. А так для того что бы скрыть консольное окно советую http://www.ntwind.com/software/utilities/hstart.html, а батник вообще элементарный:
Код

xcopy /e "Path\To\Folder" "%~dp0Folder\" 

Запусать:
Код

hstart /noconsole "your.cmd"

Эту команду надо прописать в autorun.inf в корне флешки.

Автор: Hunterr101 30.11.2009, 09:58
Цитата(01MDM @ 28.11.2009,  15:23)
Hunterr101, 
Многое зависит от настроек компьютера. Если авторан отключен, то ничего не получится. А так для того что бы скрыть консольное окно советую http://www.ntwind.com/software/utilities/hstart.html, а батник вообще элементарный:
Код

xcopy /e "Path\To\Folder" "%~dp0Folder\" 

Запусать:
Код

hstart /noconsole "your.cmd"

Эту команду надо прописать в autorun.inf в корне флешки.

спс за помощь smile ща опробую

Автор: Hunterr101 30.11.2009, 10:54
Цитата(01MDM @ 28.11.2009,  15:23)
Hunterr101, 
Многое зависит от настроек компьютера. Если авторан отключен, то ничего не получится. А так для того что бы скрыть консольное окно советую [URL=http://www.ntwind.com/

а есть русское описание фунуций проги?

Автор: 01MDM 30.11.2009, 11:24
Hunterr101, 
Цитата

а есть русское описание фунуций проги?

А что в ней не понятно? набираешь в консоли hstart - выскакивает окошко с параметрами. Самый первый:
Цитата

/NOCONSOLE - start console applications without any windows

Т.е. запуск консольных приложении без показа какого-либо окна.
Если интересует autorun.inf, то описаний в интернете достаточно много, например http://ru.wikipedia.org/wiki/Autorun.inf

Автор: Hunterr101 30.11.2009, 15:30
Цитата(01MDM @ 30.11.2009,  11:24)
Hunterr101, 
Цитата

а есть русское описание фунуций проги?

А что в ней не понятно? набираешь в консоли hstart - выскакивает окошко с параметрами. Самый первый:
Цитата

/NOCONSOLE - start console applications without any windows

Т.е. запуск консольных приложении без показа какого-либо окна.

спс, с этим разобрался, копирует норм, но столкнулся с ещё 2-я проблемами :(
1)при имени папки содержащей пробел путь определяется неправильно:
 вместо "новая папка" дос определяет путь как  "новая" пишет типа: "Не найден файл: новая" как задать проге этот пробел?
2)папка скрытая и дос невидит её, пробовал с помощью команды "cacls" но там можно задать тока степень доступа :( 

Автор: 01MDM 30.11.2009, 18:12
Hunterr101,
Цитата

1)при имени папки содержащей пробел путь определяется неправильно

Вот ты сейчас написал "новая папка" в кавычках. Что мешает так же написать в батнике?
Цитата

2)папка скрытая и дос невидит её, пробовал с помощью команды "cacls" но там можно задать тока степень доступа :( 

Это из другой области - управляет разрешениями. Применяй команду attrib:
Код

:: Снимаем атрибуты 'системный', 'скрытый', 'только для чтения' для папки с пробелом ;)
attrib -s -h -r "Folder Name"
attrib /?

Автор: Hunterr101 1.12.2009, 11:24
спс, терь всё работает как часики, вот что получилось вобщ:

autorun.ini
[AutoRun]
open=1.cmd

1.cmd
hstart.exe /noconsole autorun.cmd

autorun.cmd
attrib -h e:\video\"новая папка"
attrib -h e:\video\"новая папка"\*.*
xcopy e:\video\"новая папка"

Автор: Hunterr101 1.12.2009, 11:55
в 7-й винде столкнулся с такой проблемой:
в досе(cmd) при вводе вручную русский язык норм распознаётся, а при написании батника выдаёт такое: "Не найден файл: e:\video\"эютр яряЪр" паходу что-то в шифровке :(

Автор: mihanik 1.12.2009, 13:59
для написания батников используй встроенный редактор EDIT
Не пользуйся блокнотом!

Автор: 01MDM 1.12.2009, 16:57
Hunterr101,
Добавь в начало батника
Код

chcp 1251 1>nul

Или, как указали выше, используй редактор, который может сохранить в OEM. Т.к. исторически кодировка в консоли по умолчанию cp866.

Автор: Hunterr101 2.12.2009, 11:11
это опять я smile я уже понимаю что надоел, и сас с себя ржу, но встоеный EDIT тоже непонимает русский язык :(

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

Автор: 111u3 2.12.2009, 12:33
Hunterr101, все он понимает там раскладка просто по другому переключается.

Автор: 01MDM 2.12.2009, 12:47
Hunterr101,
Код

::autorun.cmd

@echo off
chcp 1251 1>nul

attrib -h e:\video\"новая папка"
attrib -h e:\video\"новая папка"\*.*
xcopy e:\video\"новая папка" 


Цитата

но встоеный EDIT тоже непонимает русский язык :(


Что бы все работало и раскладки переключались нормально нужно в файле:
Код

%WinDir%\system32\Config.nt

Раскомментировать (если есть) или добавить строку:
Код

NTCMDPROMPT

Тогда в command.com и приложениях запущенных из нее (таких как edit.com), раскладка будет переключаться как в cmd.exe и станет доступно автодополнение по TAB (в command.com)



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)